Используя Rails RSpec и Capybara и Selenium, как я могу проверить, чтобы убедиться, что модальные отображаются - PullRequest
0 голосов
/ 06 января 2019

У меня есть необходимый модал, который отображается, когда пользователь еще не выполнил условия обслуживания сайта. Мне нужно проверить, чтобы убедиться, что модальный бутстрап отображается после просмотра большого количества документации. Я все еще не знаю, как это сделать.

# application.html.haml
.container-fluid
  - if user_has_not_accepted_terms?
    = render 'parts/terms_modal'

мой модал

.modal#terms_modal{'tabindex': "-1", role: "dialog", 'data- 
    keyboard':false, 'data-backdrop': "static"}
  .modal-dialog{role: "document"}
    .modal-content
      .modal-header
        %h5.modal-title
          Our Terms of Service have changed
      .modal-body
        %p
          Please take a minute and review our updated BLAH
      .modal-footer
        = link_to 'Accept Terms of Service', accept_terms_user_profile_path(current_user.id, current_user), method: :patch, class: 'btn btn-primary mx-auto'

J, чтобы убедиться, что модал открывается при загрузке страницы

$(document).on('turbolinks:load', ->
  $('#terms_modal').modal('show')
)

$(document).on('page:load', ->
  $('#terms_modal').modal('show')
)

Я знаю, что пользователь, с которым я тестирую, еще не принял условия, и условное выражение возвращает true, также, когда я запускаю вызов save_and_open_page в моем тесте, я возвращаю HTML с модальным в нем

до сих пор я пробовал тестировать как

# accepting_terms_spec.rb
...
scenario 'user can accept terms of service', js: true do
  ... #user sign in and visit '/'

  within('.modal#terms_modal) do
    click_on('Accept Terms of Service')
  end

  expect(page).to have_content('Success')
end

Я получаю возврат из теста, в котором состояние .modal не видно.

1 Ответ

0 голосов
/ 06 января 2019

Поскольку модал не открывается в браузере, Capybara правильно проваливает тест.

Скорее всего, проблема в одном из ваших файлов JS. Самое большое различие между тестовой средой и средой разработки заключается в том, что в тестовой (и рабочей) среде все ваши ресурсы JS объединяются в один файл. Это допускает ошибку в одном из них, чтобы предотвратить обработку JS в других файлах. В среде разработчиков этого не происходит, потому что каждый файл обслуживается отдельно. Проверьте консоль разработчика браузера на наличие ошибок JS и исправьте их, и ошибка, вероятно, исчезнет.

Менее вероятная вероятность того, что ваш конвейер ресурсов завис и больше не объединяет новые изменения JS в файлы, обслуживаемые в тестовом режиме. Вы должны быть в состоянии принудительно выполнить перекомпиляцию с помощью rails assets:precompile, хотя это может не привести к будущим изменениям в ваших активах в зависимости от того, что именно вызывает зависание. В этом случае выполнение rails assets:clobber обычно возвращает конвейер к нормальной работе (может потребоваться выполнить RAILS_ENV=test rails assets:clobber/precompile, чтобы гарантировать, что правильные вещи будут очищены / построены в зависимости от ваших точных настроек)

...