使用 Rails RSpec 和 Capybara 和 Selenium 我如何测试以确保显示模态
Using Rails RSpec and Capybara and Selenium how can I test to make sure a modal is being displayed
我有一个必要的模式,当用户尚未排除网站的服务条款时显示。我需要测试以确保在查看大量文档后显示 bootstrap 模态我仍然不知道如何执行此操作。
# 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'
Js 确保模式在页面加载时打开
$(document).on('turbolinks:load', ->
$('#terms_modal').modal('show')
)
$(document).on('page:load', ->
$('#terms_modal').modal('show')
)
我知道我正在测试的用户还没有接受条款和条件 returns 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
我从测试中得到 return 状态 .modal 不可见。
由于模式未在浏览器中打开,水豚正确地未通过测试。
很可能是您的某个 JS 文件中的错误导致了该问题。测试环境和开发环境之间的最大区别在于,在测试(和生产)环境中,所有 JS 资产都连接到一个文件中。这允许一个错误,以防止其他文件中的 JS 被处理。在开发环境中,这不会发生,因为每个文件都是单独提供的。检查您的浏览器开发人员控制台是否存在 JS 错误并修复它们,错误可能会消失。
一种不太可能的可能性是您的资产管道已挂起并且不再将新的 JS 更改合并到在测试模式下提供的文件中。您应该能够使用 rails assets:precompile
强制重新编译,尽管这可能仍然无法获取您资产的未来更改,具体取决于导致挂起的确切原因。在这种情况下,执行 rails assets:clobber
通常会将管道重置为正常工作(可能需要执行 RAILS_ENV=test rails assets:clobber/precompile
以确保正确的事情得到 cleared/built 取决于您的确切设置)
我有一个必要的模式,当用户尚未排除网站的服务条款时显示。我需要测试以确保在查看大量文档后显示 bootstrap 模态我仍然不知道如何执行此操作。
# 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'
Js 确保模式在页面加载时打开
$(document).on('turbolinks:load', ->
$('#terms_modal').modal('show')
)
$(document).on('page:load', ->
$('#terms_modal').modal('show')
)
我知道我正在测试的用户还没有接受条款和条件 returns 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
我从测试中得到 return 状态 .modal 不可见。
由于模式未在浏览器中打开,水豚正确地未通过测试。
很可能是您的某个 JS 文件中的错误导致了该问题。测试环境和开发环境之间的最大区别在于,在测试(和生产)环境中,所有 JS 资产都连接到一个文件中。这允许一个错误,以防止其他文件中的 JS 被处理。在开发环境中,这不会发生,因为每个文件都是单独提供的。检查您的浏览器开发人员控制台是否存在 JS 错误并修复它们,错误可能会消失。
一种不太可能的可能性是您的资产管道已挂起并且不再将新的 JS 更改合并到在测试模式下提供的文件中。您应该能够使用 rails assets:precompile
强制重新编译,尽管这可能仍然无法获取您资产的未来更改,具体取决于导致挂起的确切原因。在这种情况下,执行 rails assets:clobber
通常会将管道重置为正常工作(可能需要执行 RAILS_ENV=test rails assets:clobber/precompile
以确保正确的事情得到 cleared/built 取决于您的确切设置)