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

标签 javascript node.js typescript requirejs karma-jasmine

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

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/

相关文章:

javascript - 获取 html listitem 样式值进行比较

node.js - 使用 base64 图像数据在 NodeJS 中进行图像处理

html - 如何显示具有 Angular 功能的HTML?

typescript - 在 Typescript 的 NodeList 上使用扩展运算符

javascript - 如何为 array.prototype.find 编写一个polyfill作为自定义方法?

javascript - 如何创建对象列表的 javascript 数组?

javascript - 如何在 NodeJS 中从 MySQL 查询中生成嵌套 JSON 结果?

javascript - 为什么javascript中的对象没有find方法?

html - 头部如何向左显示

Javascript 在带有 if 语句的循环内循环