Webpack在已转换的测试文件中重命名导入的模块

时间:2018-02-19 15:20:15

标签: javascript webpack module

我的测试文件是用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 ...),一切正常。它只是在测试文件中不起作用。感谢您的任何建议。

0 个答案:

没有答案