Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

unit test using typescript and karma

I am using karma, jasmine, typescript to write unit test for the helloworld application from https://angular.io/docs/js/latest/quickstart.html.

Below is the test code:

///<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 (with "--module commonjs") transpiles this test code into:

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

karma fails to run the unit test:

Uncaught Error: Module name "../myAppComponent" has not been loaded yet for context: _. Use 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): Executed 0 of 0 SUCCESS (0 secs / 0 secs)

If I use tsc with "--module amd", the transpiled test code is:

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" threw below error on the transpiled js files:

Uncaught Error: Mismatched anonymous define() module: 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"); }); }); } http://requirejs.org/docs/errors.html#mismatch at /Users/spray1/web2/node_modules/requirejs/require.js:141 Chrome 43.0.2357 (Mac OS X 10.10.3): Executed 0 of 0 ERROR (0.04 secs / 0 secs)

As you see, I have trouble to make it work either way (--module commonjs/amd). Which way is the right way to go and how to make it work? Appreciate any help!

like image 939
jiangok Avatar asked Jun 29 '15 14:06

jiangok


1 Answers

So, the link you've provided is to the JavaScript version of the quickstart, but it appears you're using TypeScript.

I would suggest looking at the TypeScript version of the quickstart documentation. It has a tsconfig.json file which provides the appropriate compile target:

{
  "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"
  ]
}
like image 58
Heretic Monkey Avatar answered Oct 20 '22 09:10

Heretic Monkey