导入外部JS模块进行Angular 7业力测试

时间:2018-12-04 17:02:22

标签: javascript angular karma-jasmine karma-runner angular7

我正在测试一个Angular 7组件,该组件已导入JS模块,如:

component.ts

import * as classA from '../../classA'; // Imported JS modules
export class component implements OnInit {
  public a = new classA(10); // Instantiate
  ...
}

classA.js

class classA {
  constructor (a) {
    this.max = a;
    ...
}

if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
    module.exports = classA;
}

component.spec.ts

import * as classA from '../../classA';

我要像在component.ts中一样导入classA。

Component.ts正常运行,但是当我运行ng test时,出现错误:TypeError: classA is not a constructor

我试图将其包含在karma.conf.js中,

module.exports = function (config) {
  config.set({
    ...
    files: [
      "../app/classA.js"
    ]
  });
};

但是仍然出现相同的错误。有谁知道如何在单元测试中导入JS模块?

2 个答案:

答案 0 :(得分:1)

您使用es6模块导入,但定义了commonjs模块。 更好地使用es6模块。

classA.js

class classA {
  constructor (a) {
     this.max = a;
    ...
}
export default classA

或使用要求:

 let classA = require('../../classA');

答案 1 :(得分:0)

我找到了解决此测试错误的方法。在Angular 7中,在component.ts中导入JS commonjs模块的正确方法是

import classA from '../../classA';

"esModuleInterop": true,
"allowSyntheticDefaultImports": true

在tsconfig.json中