Тестирование вновь введенного содержимого с помощью Rspec и Capybara

#ruby-on-rails #reactjs #rspec #capybara

#ruby-on-rails #reactjs #rspec #capybara

Вопрос:

Мы используем компоненты react в наших представлениях Rails, один из которых при нажатии кнопки заменяет другой компонент.

В идеале мы хотим создать их резервные копии с помощью тестов функций Rspec, но при нажатии кнопки и отображении нового компонента значение page не обновляется, чтобы отразить это.

Есть ли способ с помощью Rspec / Capybara получить вновь введенный контент после отображения нового компонента react?

Вот фрагмент:

 scenario 'users should be able to move to step 2', js: true do
  sign_in_with 'test@test.com', 'testpassword'
  visit new_path
  fill_in 'name', with: 'Test'
  select "Category One", :from => "dropdown"
  click_button 'Next'
  expect(page).to have_content('New Content')
end
  

Комментарии:

1. какой драйвер capybara вы используете?

Ответ №1:

Capybara на самом деле должна обновляться page с любой логикой JS (если все настроено правильно). Подробная информация:

Что происходит при нажатии Next ? Это отнимает много времени? (тогда вам может потребоваться продлить время ожидания capybara)

Для дальнейшей отладки вы можете захотеть запустить тесты с видимым браузером или сделать скриншоты в случае невозможности увидеть фактическое содержимое страницы (например. https://github.com/mattheworiordan/capybara-screenshot )

Комментарии:

1. Это не отнимает много времени при нажатии кнопки далее, она просто отображает изменения состояния компонента для отображения чего-то другого, поэтому это приводит к изменению html с того, каким он был изначально, на что-то новое. Кстати, я использую драйвер webkit.

Ответ №2:

page это просто ярлык для Capybara.current_session , нет кэша или чего-либо, что помешало бы ему отображать текущее состояние страницы. Это может указывать на то, что вы не проверяете правильность измененной информации, или информация на странице фактически не меняется при нажатии кнопки. Наиболее распространенной причиной, по которой информация не изменяется, является ошибка JS, которую вы можете проверить, просмотрев page.driver.error_messages после нажатия кнопки. Наиболее распространенными причинами этой ошибки на странице, которая отлично работает при ручном тестировании в браузере, является создание capybara-webkit со старой версией Qt или использование функций ES6 (без переноса), которые не поддерживаются последней версией Qt, с которой работает capybara-webkit. Вы хотите убедиться, что вы создали capybara-webkit с Qt 5.5.x, и если он все еще не работает, проверьте page.driver.error_messages упомянутое ранее, чтобы узнать, какие ошибки возникают.