我在一个广泛使用名称空间的框架中编写一些Typescript代码。我将如何测试在Node.js中使用名称空间的Typescript代码?
我想添加一些单元测试,涉及使用像mocha
这样的测试运行器,我将其作为模块加入。因为所有现有的文件都是用命名空间编写的,所以我无法将它们作为模块导入到我的测试中。
我可以使用/// <reference path=.../>
,但引用的类实际上并未在编译的js文件中定义。
我试着用--outFile
,这迫使我使用systemjs作为模块加载器。我试着这样做,但是当我运行:
mocha --compilers ts:ts-node/register api-test.ts
我得到的错误:
ReferenceError: System is not defined
当我手动运行tsc
编译测试代码,我看到调用System.register
但系统ISN实际上是在文件中导入/需要的。
我发现的最接近的例子是,回购协议:https://github.com/curran/jspm-mocha-example
它使用了巴贝尔,而不是打字稿,但它似乎能够成功地使用systemjs与摩卡,我没有看到明确的代码加载系统库。
更新:
从@马丁我尝试添加了-r systemjs
选项摩卡。这增加了System
并解决了参考错误。但是,接下来的问题是由Typescript编译器tsc
生成的代码最终将测试代码封装在模块加载代码中。摩卡似乎现在无法找到测试。
System.register("tests/foo-test", ["config.js", "assert"], function (exports_1, context_1) {
"use strict";
var __moduleName = context_1 && context_1.id;
var assert;
return {
setters: [
function (_1) {
},
function (assert_1) {
assert = assert_1;
}
],
execute: function() {
describe('testCase', function() {
it('type test', function() {
assert(false);
});
});
}
};
});
@martin -r标志有帮助,但是Typescript编译器现在隐藏了摩卡的测试。 – dragonx