#ecmascript-6 #jestjs
#ecmascript-6 #jestjs
Вопрос:
При написании некоторых наборов тестов для некоторых модулей ES6 я обнаружил, что Jest v26.6 сталкивается с ошибками при попытке выполнить некоторый циклический импорт.
Проблема может быть сведена к следующему:
ClassA.mjs
import {B} from './ClassB.mjs';
class A {
constructor()
{
//...
}
}
ClassB.mjs
import {A} from './ClassA.mjs';
class B extends A {
constructor()
{
super();
// ...
}
}
Cyclic.test.js
import {B} from "./ClassB.mjs";
describe('Cyclic', () => {
test('Cyclic', () => {
// ...
});
});
Jest завершается с сообщением об ошибке «Превышен максимальный размер стека вызовов» в разных местах его источника, в зависимости от импорта теста.
Существуют ли какие-либо решения для этого, какие-либо известные обходные пути?
Заранее спасибо.
Комментарии:
1. По умолчанию Jest использует CommonJS, который не был разработан для циклических dep. Поддержка Jest для встроенного ESM является неполной и бесполезной ATM. Поэтому избегайте CD.
2. A не должен импортировать B, что устранит циклическую проблему. B будет расширять A, поэтому A действительно не должен иметь ссылки на B.