我的测试文件是用javascript编写的,但外部模块是使用es6 import
语法导入的。但是,当我使用awesome-typescript-loader
转换测试文件时,测试文件包含分配给不同变量的导入模块。
因此,当我尝试在我的测试中检查导入模块的方法上的任何间谍调用时,它们会失败。我的猜测是导入的模块和我的.ts
文件中调用的实际模块是不同的。任何想法发生了什么?
用于转换测试文件的webpac.karma.config
文件是:
module.exports = {
module: {
loaders: [{
test: /\.ts$/,
loader: 'awesome-typescript-loader'
}]
},
output: {
path: __dirname + "/unittests/"
},
resolve: {
modules: ["node_modules"],
extensions: [".ts", ".js"]
}
};
我的测试文件(示例)......
import { HELLO } from './hello';
describe('check', function(){
it('should call friend method', function() {
spyOn(HELLO, 'friend');
$ctrl.methodThatCallsFriendMethod();
expect(HELLO.friend).toHaveBeenCalled(); // This is not called
});
})
在unittests文件夹中的已编译测试文件中,模块的导入如下:
Object.defineProperty(exports, "__esModule", { value: true });
var hello_1 = __webpack_require__(5); // I fear this hello_1 does not reference to the same module imported in my main.ts file
...
...
describe('should call friend method', function() {
it('should call friend method', function() {
spyOn(hello_1.HELLO, 'friend');
$ctrl.methodThatCallsFriendMethod();
expect(hello_1.HELLO.friend).toHaveBeenCalled(); // This is not called
});
});
我的HELLO模块非常简单:
export class Hello {
static friend() {
return 'dneirf;
}
}
在我的主ts文件中,我正常导入HELLO
模块(import {HELLO} from ...
),一切正常。它只是在测试文件中不起作用。感谢您的任何建议。