Щелкните событие внутри модального окна — тест

Попытка запустить тест для следующего кода, но узел не может быть найден. Использование шутки и фермента для 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,
  }
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
504
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Что ж, похоже, вы пытаетесь найти узел, который будет условно отображаться, если все упомянутые вами переменные состояния истинны, а ни одна из них не является (на самом деле вы устанавливаете для них значение 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();
    });
});

Но как я могу проверить, например, событие клика?

user 9191 11.04.2019 19:39

Существование компонента работало нормально, onclick не работал. Не удалось найти ни одного узла.

user 9191 12.04.2019 13:33

любая причина, по которой можно найти onclick?

user 9191 15.04.2019 15:55

@ user9191, можешь обновить исходный пост? Вы установили состояния в true?

etarhan 15.04.2019 16:02

обновлено. Тем не менее узел не может быть найден. Когда я запускаю console.info(wrapper.debug()), я не вижу внутри него модального содержимого.

user 9191 15.04.2019 16:13

@ user9191 setState является асинхронным, возможно, состояние не обновляется до того, как вы сделаете щелчок. Не могли бы вы попробовать то, что в моем обновленном ответе?

etarhan 15.04.2019 16:16

Метод «имитация» предназначен для запуска на 1 узле. Вместо этого найдено 0.

user 9191 15.04.2019 16:18

@user9191 user9191 Как насчет того, чтобы удалить часть at(0), например: wrapper.find('Datasource').find('.sidemodal_addnew_x').simul‌​ate('click');

etarhan 15.04.2019 16:23

уже сделал это, я тоже пробовал следующее: wrapper.find('Datasource').find('.sidemodal_addnew_x').props‌​().onClick(); та же ошибка

user 9191 15.04.2019 16:24

Давайте продолжить обсуждение в чате.

etarhan 15.04.2019 16:25

Другие вопросы по теме