我正在测试一个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模块?
答案 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中