我正在使用 Capybara、Cucumber 和 Poltergeist。我正在测试附加到表单提交按钮的 JavaScript 函数,该函数旨在捕获提交事件并阻止它(在后台执行 AJAX 请求)。使用和不使用 AJAX,页面最终看起来都一样,但 AJAX 方法要快得多,并且不会中断浏览体验等。
我可以做些什么来测试表单确实没有提交,并且更改是动态 AJAX 调用而不是重新加载的结果?
最佳答案
@jules 答案的修改版本:
describe "My page", :js do
it "reloads when it should" do
visit "/"
expect_page_to_reload do
click_link "Reload me"
end
end
def expect_page_to_reload
page.evaluate_script "$(document.body).addClass('not-reloaded')"
yield
expect(page).not_to have_selector("body.not-reloaded")
end
end
编辑 2017-01-19:
我发现了我的这个旧答案,奇怪的是它似乎没有回答实际问题,而是相反(检查页面已重新加载)。这是我们目前在我们的应用程序中所做的检查页面是否不重新加载:
def expect_page_not_to_reload
page.evaluate_script %{$(document.body).addClass("not-reloaded")}
expect(page).to have_selector("body.not-reloaded")
yield
sleep 0.5 # Give it a chance to reload before we check.
expect(page).to have_selector("body.not-reloaded")
end
这两个答案都依赖于 jQuery 来添加类。
关于javascript - 我如何在 Capybara 中测试页面是否*未*重新加载(JavaScript onClick 拦截有效)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20243208/