RSpe c + Capybara + Selenium Webdriver: проверьте, что модальная кнопка запускает jquery, который устанавливает флажок не работает - PullRequest
2 голосов
/ 21 января 2020

Это работает в разработке, когда тестируется вручную. Но Капибара его не ловит.

Работает 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
...