使用node.js,Mocha和mocha-jsdom测试Typescript生成的类?

时间:2017-05-19 19:12:29

标签: javascript unit-testing typescript mocha jsdom

我想从bash运行单元测试,使用mocha和mocha-jsdom测试我的Typescript生成的Javascript类。我使用的是mocha-jsdom,因为我想在我的测试中模拟dom,但是从bash运行单元测试。

我已经看过他们在浏览器中使用mocha的前端测试框架的几个例子,但我还没有看到他们从bash运行的地方。

似乎我无法在我的mocha单元测试中包含从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中运行创建类的函数导入到mocha单元测试中?

1 个答案:

答案 0 :(得分:1)

因此,让我们从执行测试开始。 要执行测试,您有几种选择:

  • 使用karma。 Karma是一名JavaScript测试运行者。实际上,您在karma.config.js文件中指定要执行的所有测试,它将执行所有测试。您还拥有watch功能,允许您在每次更改代码时执行测试
  • 使用node.js.在package.json文件的脚本属性中,指定命令test,并将该命令与该脚本关联,以便对所有测试执行mocha。然后,只需键入npm test
  • 即可运行测试
  • 如果你想使用bash,我的建议是使用它来触发npm test命令或karma命令。这是用于通过bash开始测试的最简单方法。您还可以在Win上设置.bat文件,该文件始终通过npm / karma命令运行测试
  • 将任务运行器用作GulpGrunt等...您可以指定触发测试的任务,然后运行任务,例如提供命令gulp mytask

我的建议是直接使用node.js。它使事情变得更容易。

关于TypeScript,你可以直接使用带有TypeScrit的mocha,不需要JavaScript。我建议你将mocha与chai,chai-as-promise和sinon结合起来。 Chai是一个断言库。 Chai-as-promise允许你测试promises和sinon来测试函数和方法。

这是package.json的示例,其中包含我在上面说过的测试命令:

"scripts": {
    "test": "find ./src -name '*spec.ts' | xargs mocha -r ts-node/register"
}

使用此行,您将执行以*spec.ts结尾的所有文件。 ts节点是一个非常有用的节点插件,允许您直接通过命令ts-node myfile.ts

运行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"
}

关于如何在测试中集成mocha,这里是一个可以用作模式的spec文件的声明:

// 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

希望这有帮助!任何查询都让我知道!