从 JS 测试文件中使用 Karma 和 Jasmine 测试编译后的 TypeScript

Testing compiled TypeScript with Karma and Jasmine from a JS test file

我有一个结构如下的项目:

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(...) 块中,我无法使用 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 编译器将我编译的 classes 包装在 define() 包装器中,或者我如何配置我的测试以导入 class 而不是包裹在 define() 包装纸中?

你应该使用 "--module amd" 参数

在 visual studio 2015 年:项目/"your project" properties/Typescript Building/module system/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;
});