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

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

本文关键字:测试 文件 编译 TypeScript JS Karma Jasmine 使用      更新时间:2023-09-26

我有一个具有以下结构的项目:

build
- out.js
spec
- foo.spec.js
- bar.spec.js
src
- foo.ts
- bar.ts

这两个.ts文件被构建到out.js中。在我的.spec.js文件中,我希望能够轻松地引用out.js

当在纯JS项目中使用Karma/Jastine时,我只需使用RequireJS,并将我的测试文件封装在define(['a'], function(a) { ... });文件中。然后,在a.js中,内容将被这样包装:

define([], function() {
    Foo.prototype. .......
    Foo.prototype. .......
    return Foo; 
});

然而,由于out.js将由TypeScript编译器构建,因此无法封装在define(...)块中,因此我无法使用RequireJS正确导入它。


澄清:

有了手写的JS,比如下面,我可以把它导入我的测试文件fine:

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建筑/模块系统/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;
});