Это работает в разработке, когда тестируется вручную. Но Капибара его не ловит.
Работает JS:
$(document).on("click", "#modal_accept_waiver", function() {
$("#registration_accept_waiver").prop("checked", true);
$("#waiverModal").modal('hide');
});
HTML / ERB:
<%= simple_form_for [@event, @registration] do |f| %>
<%= f.error_notification %>
...form fields...
<%= f.simple_fields_for :user do |o| %>
...more form fields...
<div>
<h4>
<%= f.check_box :accept_waiver, required: true %>
<strong>Accept the
<a id="waiver_click" data-toggle="modal" data-target="#waiverModal" href="#">
Waiver and Release
</a>
</strong>
</h4>
</div>
<% end %>
<%= f.submit 'Register', class: 'btn yellow use-load-screen' %>
<% end %>
Тест на капибару:
it 'has a modal for the waiver, which checks the box', js: true do
expect(page).to have_unchecked_field('registration_accept_waiver') # passes
click_on 'waiver_click' # works
within('#waiverModal') do
expect(page).to have_content 'Waiver of Liability' # passes
click_on 'Accept' # works
end
expect(page).to have_content event.title # just to force Capybara to wait for the JS to complete
expect(page).to have_checked_field('registration_accept_waiver') # fails
end
Вывод:
Register for Event
when anon user
Capybara starting Puma...
* Version 4.3.1 , codename: Mysterious Traveller
* Min threads: 0, max threads: 4
* Listening on tcp://127.0.0.1:61204
has a modal for the waiver, which checks the box (FAILED - 1)
Failures:
1) Register for Event when anon user has a modal for the waiver, which checks the box
Failure/Error: expect(page).to have_checked_field('registration_accept_waiver')
expected to find visible field "registration_accept_waiver" that is not disabled that is checked but there were no matches. Also found "", which matched the selector but not all filters. Expected checked true but it wasn't
[Screenshot]: tmp/screenshots/failures_r_spec_example_groups_register_for_event_when_anon_user_has_a_modal_for_the_waiver__which_checks_the_box_288.png
...stuff...
Finished in 6.73 seconds (files took 5.88 seconds to load)
1 example, 1 failure
Просмотр скриншота подтверждает, что флажок не установлен. То же самое можно сказать и о save_and_open_page
.
Но, когда я заставляю тест провалиться в разных местах, я вижу, как модал открывается и закрывается, как и ожидалось на скриншотах. Это говорит мне, что некоторые из JS работают как положено.
Есть идеи, что мне не хватает?
Настройка:
- RSpe c
- Rspe c -повторный
- Капибара
- Selenium webdriver
rails_helper.rb:
config.before(:each, type: :system, js: true) do
driven_by :selenium_chrome_headless
Capybara.page.driver.browser.manage.window.resize_to(1920, 2024)
end