То есть мы импортим в тест класс, который импортит в себя другие классы?
Надо понимать, что класс не импортирует классы, импорт/экспорт — это модули. Класс может создавать инстансы других классов или принимать инстансы как параметр конструктора, это нормально — во втором случае вы просто пишете mock: заглушку, которая предсказуемо имитирует нужное поведение. Но если вы из модуля экспортируете инстанс класса, то будут проблемы с тестированием. Например, вот так плохо:
// A.js
class A {}
export const a = new A();
// B.js
import { a } from './A';
export class B {
constructor() {
this.a = a;
}
doStuff() {}
};
Так как класс B неявно зависит от A, то нельзя написать заглушку для A, и тесты для B будут тестировать поведение A.
Вот так лучше:
// A.js
export class A {};
// B.js
export class B {
constructor(a) {
this.a = a;
}
doStuff() {}
};
// index.js
import { A } from './A';
import { B } from './B';
const a = new A();
const b = new B(a);
b.doStuff();
Возможно ли работать с DOM в импортируемом классе?
Если пускалка тестов это поддерживает. Для mocha, ЕМНИП, надо прикручивать karma.
Это будет считаться юнит-тестом?
Unit-test по определению тестирует какую-то функциональную единицу — класс, модуль, функцию, метод.