#reactjs #jestjs #babel-jest #react-scripts
#reactjs #jestjs #babel-шутка #реагирующие скрипты
Вопрос:
У меня есть очень простой тест
const div = document.createElement("div");
ReactDOM.render(<App />, div);
ReactDOM.unmountComponentAtNode(div);
сбой в этом коде:
componentDidMount() {
const ProgressBar = require('progressbar.js');
/* istanbul ignore next */
const bar = new ProgressBar.Line('#progressDiv', {
strokeWidth: 2,
easing: 'easeInOut',
ошибка:
● renders without crashing
Container does not exist: #progressDiv
6 | const ProgressBar = require('progressbar.js');
7 | /* istanbul ignore next */
> 8 | const bar = new ProgressBar.Line('#progressDiv', {
| ^
9 | strokeWidth: 2,
контейнер действительно существует.
Я предполагаю, что это распространенная проблема, потому что componentDidMount выполняется перед рендерингом?
выполнить команду:
npm test
=> "test": "react-scripts test --watchAll=false"
Версии:
"react-scripts": {
"version": "2.1.5",
"jest": "23.6.0",
Ответ №1:
после долгих мучений я решил это с помощью макета.
jest.mock('../components/app/App');
it("renders without crashing", () => {
const spy = jest.fn()
App.prototype.componentDidMount.mockImplementation(() => spy())
const div = document.createElement("div");
ReactDOM.render(<App />, div);
ReactDOM.unmountComponentAtNode(div);
});
это проходит мои тесты, хотя vs code
все еще жалуется
mockImplementation не существует для type () => void