我有一个具有以下结构的项目:
build
- out.js
spec
- foo.spec.js
- bar.spec.js
src
- foo.ts
- bar.ts
这两个 .ts 文件被构建到 out.js
中。在我的 .spec.js
文件中,我希望能够轻松引用 out.js
。
在纯 JS 项目中使用 Karma/Jasmine 时,我只需使用 RequireJS,并将测试文件包装在 define(['a'], function(a) { ... });
文件中。然后,在 a.js
中,内容将如下所示:
define([], function() {
Foo.prototype. .......
Foo.prototype. .......
return Foo;
});
但是,由于 out.js 将由 TypeScript 编译器构建,因此无法包装在 define(...)
block 中,因此我无法使用 RequireJS 正确导入它。
澄清一下:
使用手写的 JS,如下所示,我可以将其导入到我的测试文件中:
define([], function() {
function Bla() { }
Bla.prototype.hi = function () {
return "hey";
};
return Bla;
});
使用类似的 JS,但使用 TypeScript 编译器构建,因此缺少 define([])
包装器,当我将其导入到测试中时,我只是得到 undefined
。
var Bla = (function () {
function Bla() { }
Bla.prototype.hi = function () {
return "hey";
};
return Bla;
})();
如何配置 TypeScript 编译器将已编译的类包装在 define()
包装器中,或者如何配置测试以导入该类而不将其包装在 define()
包装器中?
最佳答案
您应该使用"--module amd"参数
在 Visual Studio 2015 中:项目/“您的项目”属性/Typescript Building/模块系统/amd
下一个:
bla.ts:
function Bla() {
}
Bla.prototype.hi = function () {
return "hey";
};
export = Bla;
bla.js:
define(["require", "exports"], function (require, exports) {
function Bla() {
}
Bla.prototype.hi = function () {
return "hey";
};
return Bla;
});
关于javascript - 使用 Karma 和 Jasmine 从 JS 测试文件测试编译的 TypeScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34191830/