使用node.js,Mocha和mocha-jsdom测试Typescript生成的类?
我想从bash运行单元测试来使用mocha和mocha-jsdom测试我的Typescript生成的Javascript类。我正在使用mocha-jsdom,因为我想在我的测试中模拟dom,但从bash运行单元测试。使用node.js,Mocha和mocha-jsdom测试Typescript生成的类?
我见过几个例子,他们在浏览器中使用mocha的前端测试框架,但我还没有看到它们从bash运行的位置。
看来我无法在我的摩卡单元测试中包含从Typescript生成的Javascript类。
var jsdom = require('../../index');
require('../../src/js/acct/AccountManager.js');
describe('GenerateHTML', function() {
describe('#generateHTML()', function() {
jsdom()
it('should generate a table', function() {
var vahm = new VerticalAccountHTMLManager(document, "testId");
expect($("#testId")[0]).eql("table");
});
});
});
有没有什么办法可以将创建类的函数导入摩卡单元测试,同时仍然从bash运行它?
那么让我们从执行测试开始。 对于执行测试你有几种选择:
- 使用
karma
。 Karma是一名JavaScript测试专家。实际上,您在karma.config.js
文件中指定了要执行的所有测试,并且它将执行所有测试。您还拥有一个watch
功能,该功能允许您在每次更改代码时执行测试。 - 使用node.js.在
package.json
文件的脚本属性中,您可以指定命令test
,并将该命令与该脚本相关联,以对所有测试执行摩卡。然后你可以运行测试只需输入npm test
- 如果你想使用bash,我的建议是使用它来触发npm测试命令或karma命令。这是通过bash启动测试最简单的方法。你也可以在Win上设置一个.bat文件,它通过npm/karma命令运行你的测试。
- 使用任务运行器为
Gulp
,Grunt
等...你可以指定一个任务,在其中触发你的测试,然后运行任务提供例如命令gulp mytask
我的建议是直接使用node.js。它使事情变得更容易。
关于TypeScript,您可以直接在TypeScrit中使用mocha,不需要JavaScript。我建议你把摩卡与柴,柴,诺言和sinon结合起来。柴是一个断言库。 Chai-as-promised允许您测试promise和sinon来测试函数和方法。
这就是我上面说的package.json
与测试命令的例子:
"scripts": {
"test": "find ./src -name '*spec.ts' | xargs mocha -r ts-node/register"
}
这条线,你将执行所有这一切结束了*spec.ts
的文件。 的TS-节点是一个非常有用的节点插件,它允许您直接通过命令来运行TS ts-node myfile.ts
关于依赖于你的package.json
这里有一个有用的清单:
"devDependencies": {
"@types/chai": "^3.5.0",
"@types/chai-as-promised": "^0.0.30",
"@types/mocha": "^2.2.40",
"@types/node": "^7.0.12",
"@types/sinon": "^2.1.2",
"chai": "^3.5.0",
"chai-as-promised": "^6.0.0",
"husky": "^0.13.3",
"mocha": "^3.2.0",
"sinon": "^2.1.0",
"ts-node": "^3.0.2",
"typings": "^2.1.1"
}
关于如何整合摩卡你的测试里面,这里是一个规范文件,可以作为图案使用的声明:
// imports of testing libraries
import * as mocha from 'mocha';
import * as chai from 'chai';
import * as chaiAsPromised from 'chai-as-promised';
import sinon = require('sinon');
// import of the source files to be tested
import Main from './Main'; // an example
// testing inits
chai.use(chaiAsPromised);
const expect = chai.expect;
const assert = chai.assert;
const should = chai.should();
你可以尝试看看这个回购协议。有一个非常简单的TypeScript项目和我上面提到的所有测试库。它仍在进行中,我没有时间完成它,所以主README.md也没有更新。 但是,如果你克隆项目或下载源代码,你可以有一个真正的全景所有我上面说的事情和所有你可以在你的测试中使用的方法的说明:
https://github.com/quirimmo/testing-typescript-mocha-chai-sinon
希望这个帮助!任何查询让我知道!
有两个问题:为什么使用TypeScript,但是您是否直接测试生成的JavaScript代替TypeScript?那么为了执行测试,设置一个由bash文件触发的nodejs应用程序呢? – quirimmo
@quirimmo“谁使用TypeScript,但是使用生成的Javascript而不是TypeScript直接进行测试?”因为我不知道这是一个选项。 “那么为了执行测试,怎样设置由bash文件(shell脚本)触发的节点js应用程序?”我只是想运行我的测试。 – leeand00
好点:D提供一些可用的代码和例子的答案:) – quirimmo