Угловой 7 карма тест с импортом внешних JS модулей - PullRequest
0 голосов
/ 04 декабря 2018

Я тестирую компонент 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';

Я импортирую classA как то, что я сделал в component.ts.

Component.ts работает отлично, но когда я запускаю тест ng, он выдает ошибку: TypeError: classA is not a constructor

Я пытался включить его в karma.conf.js, например:

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

Но все равно получаю ту же ошибку.У кого-нибудь есть идеи, как импортировать JS-модули в модульное тестирование?

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Я нашел способ исправить эту ошибку тестирования.В Angular 7 правильным способом импорта модуля JS commonjs в component.ts является

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

с

"esModuleInterop": true,
"allowSyntheticDefaultImports": true

в tsconfig.json

0 голосов
/ 04 декабря 2018

Вы используете импорт модулей es6, но определяете модуль commonjs.Также лучше использовать модули es6.

classA.js

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

Или для использования требуется:

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