Попытка запустить тест для следующего кода, но узел не может быть найден. Использование шутки и фермента для ReactJS
render () {
return (
this.state.permissionsLoaded ?
this.state.localPermissions[globals.UI_DATASOURCEDESIGNER] ?
this.state.datasourcePermissionsLoaded ?
this.state.allowCurrentDatasource ?
<div>
<Modal isOpen = {this.state.addRequestModalOpen} style = {shareModal}>
<div title = "Close Window Without Saving" className = "sidemodal_addnew_x" onClick = {() => {this.closeAddModal()}}><FontAwesome name='xbutton' className='fa-times' /></div>
Продолжайте получать следующую ошибку: Метод «simulate» предназначен для запуска на 1 узле. Вместо этого найдено 0.
Вот что у меня есть для моего теста:
beforeEach(() => wrapper = mount(<MemoryRouter keyLength = {0}><Datasource {...baseProps} /></MemoryRouter>));
it("Test Click event on Add DataSource ", () => {
wrapper.find('Datasource').setState({
permissionsLoaded:true,
localPermissions:true,
datasourcePermissionsLoaded:true,
allowCurrentDatasource:true,
addRequestModalOpen:true
})
wrapper.update();
wrapper.find('Datasource').find('.sidemodal_addnew_x').simulate('click')
});
Здесь как список моего состояния:
permissionsLoaded: false,
datasourcePermissionsLoaded: false,
allowCurrentDatasource: false,
localPermissions:{
[globals.UI_DATASOURCEDESIGNER]:false,
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Что ж, похоже, вы пытаетесь найти узел, который будет условно отображаться, если все упомянутые вами переменные состояния истинны, а ни одна из них не является (на самом деле вы устанавливаете для них значение false и заранее обновляете оболочку). Это означает, что не существует .sidemodal_addnew_x, который можно было бы использовать для имитации нажатия, поэтому вы получаете это сообщение об ошибке.
Если вместо этого вы хотите проверить существование этого компонента, вы можете сделать следующее:
expect(wrapper.find('Datasource').find('.sidemodal_addnew_x').exists()).to.equal(false);
Если вы действительно хотите протестировать щелчок, убедитесь, что компонент получает .sidemodal_addnew_x и отображается, установив для переменных состояния значение true:
it("Test Click event on Close Window Without Saving", (done) => {
baseProps.onClick.mockClear();
wrapper.find('Datasource').setState({
permissionsLoaded:true,
localPermissions:true,
datasourcePermissionsLoaded:true,
allowCurrentDatasource:true,
addRequestModalOpen:true,
}, () => {
wrapper.update();
wrapper.find('Datasource').find('.sidemodal_addnew_x').simulate('click');
done();
});
});
Существование компонента работало нормально, onclick не работал. Не удалось найти ни одного узла.
любая причина, по которой можно найти onclick?
@ user9191, можешь обновить исходный пост? Вы установили состояния в true?
обновлено. Тем не менее узел не может быть найден. Когда я запускаю console.info(wrapper.debug()), я не вижу внутри него модального содержимого.
@ user9191 setState является асинхронным, возможно, состояние не обновляется до того, как вы сделаете щелчок. Не могли бы вы попробовать то, что в моем обновленном ответе?
Метод «имитация» предназначен для запуска на 1 узле. Вместо этого найдено 0.
@user9191 user9191 Как насчет того, чтобы удалить часть at(0), например: wrapper.find('Datasource').find('.sidemodal_addnew_x').simulate('click');
уже сделал это, я тоже пробовал следующее: wrapper.find('Datasource').find('.sidemodal_addnew_x').props().onClick(); та же ошибка
Давайте продолжить обсуждение в чате.
Но как я могу проверить, например, событие клика?