У меня есть минимальное тестовое приложение со следующим компонентом:
import React from 'react';
import $ from 'jquery';
export default class App extends React.Component {
componentDidMount() {
console.log('componentDidMount', $('#helloDiv').length);
}
render() {
return <div id='helloDiv'>
Hello React!
</div>;
}
}
это отлично работает при загрузке в браузере (Chrome). console.log() в componentDidMount() выводит 1 найденный элемент helloDiv
Однако, если я запускаю тест, используя mocha + энзим + jsdom, тот же самый console.log() в компоненте приложения выводит 0:
import React from 'react';
import { mount } from 'enzyme';
import { expect } from 'chai';
import App from '../src/client/app/first'
describe('first test', () => {
it('should pass', () => {
const app = mount(<App />);
expect(app.find('#helloDiv').length).to.eq(1);
});
});
Примечание. У меня нет проблем с этим модульным тестом, он проходит. Настоящая проблема заключается в том, что когда ‹ App /> монтируется с использованием фермента, вызывается componentDidMount(), но оператор console.log() внутри него выводит 0 вместо 1
Вот как я запускаю мокко:
mocha --require enzyme/withDom --compilers js:babel-core/register test/index.test.js
Есть идеи, почему селектор jquery ничего не находит в тесте? Это не должно быть проблемой мокко, потому что такая же проблема возникает, если я перехожу на шутку
cheerio
для приложений Node.Js вместо jQuery. - person Mijago   schedule 10.02.2017app.find('#helloDiv')
ищет внутри приложения, но у самого приложения есть идентификатор? Ваша версия jQuery выполняет поиск по всему документу. - person Prinzhorn   schedule 10.02.2017render()
. Использование jQuery для поиска информации путем проверки DOM не имеет смысла в этом контексте. - person Mike 'Pomax' Kamermans   schedule 11.02.2017