【问题标题】:Testing compiled TypeScript with Karma and Jasmine from a JS test file使用 JS 测试文件中的 Karma 和 Jasmine 测试编译的 TypeScript
【发布时间】:2016-03-15 11:52:21
【问题描述】:

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

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 编译器以将已编译的类包装在 define() 包装器中,或者如何配置我的测试以导入该类而不将其包装在 define() 包装器中?

【问题讨论】:

    标签: javascript node.js typescript requirejs karma-jasmine


    【解决方案1】:

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

    在 Visual Studio 2015 中:项目/“您的项目”属性/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;
    });

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-07
      • 1970-01-01
      • 2015-12-10
      • 2017-06-10
      • 2016-06-20
      • 2014-05-04
      • 1970-01-01
      相关资源
      最近更新 更多