#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 (если все настроено правильно). Подробная информация:
- https://github.com/jnicklas/capybara#asynchronous-javascript-ajax-and-friends
- https://robots.thoughtbot.com/write-reliable-asynchronous-integration-tests-with-capybara
Что происходит при нажатии 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
упомянутое ранее, чтобы узнать, какие ошибки возникают.