I want to test my TypeScript code with Jasmine executed by Karma.
Unfortunately the Karma is unable to find my module and exists with "Module name has not been loaded yet for context".
My TypeScript class is this:
src/ts/Greeter.ts
export default class Greeter {
name:string;
constructor(message:string) {
this.name = message;
}
greet() {
return "Hi " + this.name;
}
}
dest/js/Greeter.js
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
"use strict";
var Greeter = (function () {
function Greeter(message) {
this.name = message;
}
Greeter.prototype.greet = function () {
return "Hi " + this.name;
};
return Greeter;
}());
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = Greeter;
},{}]},{},[1]);
And here is my test file:
test/ts/GreeterSpec.ts
///<reference path="../../../typings/index.d.ts"/>
import Greeter from "../../../src/ts/Greeter/Greeter";
describe('Greeter', function () {
it('says Hi', function () {
var name = 'Joe';
var greeter = new Greeter(name);
expect(greeter.greet()).toBe('Hi ' + name);
});
});
test/js/GreeterSpec.js
"use strict";
///<reference path="../../../typings/index.d.ts"/>
var Greeter_1 = require("../../../src/ts/Greeter/Greeter");
describe('Greeter', function() {
it('says Hi', function() {
var name = 'Joe';
var greeter = new Greeter_1.default(name);
expect(greeter.greet()).toBe('Hi ' + name);
});
});
When executing my test, I get this response:
Uncaught Error: Module name "../../../src/ts/Greeter/Greeter" has not been loaded yet for context.
This is my compiler configuration:
tsconfig.json
{
"compilerOptions": {
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"module": "commonjs",
"moduleResolution": "node",
"noEmitOnError": true,
"noImplicitAny": true,
"removeComments": false,
"sortOutput": true,
"sourceMap": true,
"target": "es5"
},
"exclude": [
"node_modules",
"typings/main",
"typings/main.d.ts"
]
}
How should I declare my import in my test specification to make the compiled version finding my module?
I hesitate to post this since I don't use TypeScript, but shouldn't the file test/js/GreeterSpec.js where you have the src/ts/Greeter/...
"use strict";
///<reference path="../../../typings/index.d.ts"/>
var Greeter_1 = require("../../../src/ts/Greeter/Greeter");
instead be src/js/Greeter/...
as in:
"use strict";
///<reference path="../../../typings/index.d.ts"/>
var Greeter_1 = require("../../../src/js/Greeter/Greeter");
In other words, it looks like you are calling the TypeScript when you really want the JavaScript.