使用打字稿和业力进行单元测试

jia*_*gok 11 amd typescript karma-runner

我正在使用karma,jasmine,typescript来编写来自https://angular.io/docs/js/latest/quickstart.html的helloworld应用程序的单元测试.

以下是测试代码:

///<reference path="../typings/jasmine/jasmine.d.ts"/>

import {
    MyAppComponent
} from '../spray1';

describe("name is Alice", () => {
    var comp = new MyAppComponent();

    it("verify name", () => {
        expect(comp.name).toBe("Alice"); 
    });
});
Run Code Online (Sandbox Code Playgroud)

tsc(带"--module commonjs")将此测试代码转换为:

///<reference path="../typings/jasmine/jasmine.d.ts"/>
var spray1_1 = require('../spray1');
describe("name is Alice", function () {
    var comp = new myAppComponent_1.MyAppComponent();
    it("verify name", function () {
        expect(comp.name).toBe("Alice");
    });
});
Run Code Online (Sandbox Code Playgroud)

业力未能运行单元测试:

未捕获错误:尚未为上下文加载模块名称"../myAppComponent":_.使用require([]) http://requirejs.org/docs/errors.html#notloaded at /Users/spray1/web2/node_modules/requirejs/require.js:141

Chrome 43.0.2357(Mac OS X 10.10.3):执行0 0成功(0秒/ 0秒)

如果我使用tsc"--module amd",则转换后的测试代码为:

define(["require", "exports", '../spray1'], function (require, exports, spray1_1) {
    describe("name is Alice", function () {
        var comp = new spray1_1.MyAppComponent();
        it("verify name", function () {
            expect(comp.name).toBe("Alice");
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

"karma start test/karma.conf.js"在已转换的js文件上抛出以下错误:

未捕获的错误:匿名的define()模块不匹配:函数(require,exports,spray1_1){describe("name is Alice",function(){var comp = new spray1_1.MyAppComponent(); it("verify name",function( ){expect(comp.name).toBe("Alice");});}); } http://requirejs.org/docs/errors.html#mismatch 在/Users/spray1/web2/node_modules/requirejs/require.js:141铬43.0.2357(Mac OS X的10.10.3):0 0时执行错误(0.04秒/ 0秒)

如你所见,我无法使其工作(--module commonjs/amd).哪种方式是正确的方法以及如何使其工作?感谢任何帮助!

Her*_*key 1

因此,您提供的链接是快速入门的 JavaScript 版本,但您似乎正在使用 TypeScript。

我建议查看快速入门文档的 TypeScript 版本。它有一个tsconfig.json提供适当编译目标的文件:

{
  "compilerOptions": {
    "target": "es5",
    "module": "system",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": false,
    "noImplicitAny": false
  },
  "exclude": [
    "node_modules",
    "typings/main",
    "typings/main.d.ts"
  ]
}
Run Code Online (Sandbox Code Playgroud)