У меня возникла небольшая досадная проблема при попытке протестировать компонент реагирующего модального класса в Enzyme, класс использует bootstrap и jQuery, приложение ниже.
componentDidMount() {
// @ts-ignore
$('#' + this.props.modalId).modal('toggle');
this.addKeydownHandler();
}
componentWillUnmount() {
this.removeKeydownHandler();
// @ts-ignore
$('#' + this.props.modalId).modal('toggle');
}
addKeydownHandler = () => {
$(document).on('keydown', (e: any) => { this.preventTabKey(e) });
}
removeKeydownHandler = () => {
$(document).off('keydown', (e: any) => { this.preventTabKey(e) });
}
Я импортирую всев моем индексном файле, чтобы они были доступны по всему веб-сайту, как показано ниже.
import 'bootstrap/dist/css/bootstrap.css';
import 'bootstrap/dist/css/bootstrap-theme.css';
import * as jquery from 'jquery';
(window as any).jQuery = jquery;
import 'popper.js';
import '../node_modules/bootstrap/dist/js/bootstrap.min.js';
И я вызываю монтирование фермента, как показано ниже.
var children = <div className="fgsr" ><p>Test</p></div>
var modal = Enzyme.mount(
<Modal modalId={"testId"} >
{children}
</Modal>
);
Проблема в том, что я простомонтируя модал для тестирования, я получаю различные ошибки - «TypeError: $ (...). модал не является функцией» и «Bootstrap js требуется jQuery», если я просто добавляю bootstrap js
Хакерское исправление состоит в том, чтобы просто добавить импортируемые ниже данные в класс Modal, но, очевидно, не нужно включать несколько больших файлов только для запуска тестов.
import * as jquery from 'jquery';
(window as any).jQuery = jquery;
import '../../../../node_modules/bootstrap/dist/js/bootstrap.min.js';
Есть ли обходной путь для этого илиспособ добавить дополнительный импорт в установленную оболочку Enzyme?