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

时间:2015-06-29 14:27:55

标签: typescript karma-runner amd

我正在使用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"); 
    });
});

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");
    });
});

业力未能进行单元测试:

  

未捕获错误:尚未为上下文加载模块名称“../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");
        });
    });
});

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

  

未捕获的错误:匿名的define()模块不匹配:function(require,exports,spray1_1){           describe(“name is Alice”,function(){               var comp = new spray1_1.MyAppComponent();               它(“验证名称”,函数(){                   期待(comp.name).toBe( “爱丽丝”);               });           });       }       http://requirejs.org/docs/errors.html#mismatch       在/Users/spray1/web2/node_modules/requirejs/require.js:141   Chrome 43.0.2357(Mac OS X 10.10.3):执行0 0错误(0.04秒/ 0秒)

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

1 个答案:

答案 0 :(得分:1)

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

我建议查看TypeScript version of the quickstart documentation。它有一个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"
  ]
}