Тесты Capybara не работают, в то время как реальное приложение работает нормально. Интерфейс React в Rails 5

Спецификации: Rails 5.2, Ruby 2.5.1, Yarn 1.91.1, React-Rails 2.6.0, selenium-webdriver 3.14, chromedriver 77, capybara gem 3.29, Ubuntu 18.04

Проблема: я создал анкету, используя компоненты реакции в приложении Rails, которое работает при запуске в режиме разработки. Я могу нажать кнопку «да» или «нет», после чего функция обратного вызова отобразит новый текст вопроса. Однако мои интеграционные тесты селена этого не замечают. Объект page по-прежнему имеет тот же текст для первого вопроса, поэтому я получаю сообщение об ошибке, подобное этому.

Failure/Error: expect(question.text).to include('last question') expected "first question" to include "last question"

Сам тест выглядит так в features/questionnaire.rb

 RSpec.feature "Onboarding Questionnaire", type: :feature, js:true do
 (...)
 it...
   question = find('h3.question')
   expect(question.text).to include('first question')
   yes = find('#yes')
   yes.click
   sleep 5
   question = find('h3.question')
   expect(question.text).to include('last question')

Проблема возникает после yes.click. Сначала я думал, что моя анимация вызывает проблему, но я удалил ее, и это просто использование setState в моей функции обратного вызова.

Вот моя функция обратного вызова

 saveAnswer(e) {
    questionnaire = this
    ++questionnaire.state.page
    questionnaire.setState({page: questionnaire.state.page})
  } 

Вот конфигурация моего драйвера
Capybara.javascript_driver = :selenium_chrome_headless


person Randall Coding    schedule 21.11.2019    source источник


Ответы (1)


Теперь использование sleep работает как надо. Вот изменения, которые я сделал.

1) Я удалил устаревший гем chromedriver-helper и заменил его на webdrivers

2) В файл rails_helper.rb добавлено require 'webdrivers'.

3) Обнаружена ошибка в моем коде реакции (который не отображался в процессе разработки или не регистрировался в веб-драйвере Chrome) questionnaire = this, который я изменил на var questionnaire = this.

Интеграционные тесты теперь проходят нормально, используя selenium_chrome_headless

person Randall Coding    schedule 22.11.2019