javascript - 我如何在 Capybara 中测试页面是否*未*重新加载(JavaScript onClick 拦截有效)?

标签 javascript ajax cucumber capybara poltergeist

我正在使用 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/

相关文章:

javascript - localeCompare 为不同的 unicode 符号返回 0

javascript - Jquery 异步请求

ruby-on-rails - "cucumber: command not found"命令行错误; "rake cucumber"虽然工作正常

ajax - 使用 Proc 返回默认布局行为

google-chrome - sudo apt-get install xvfb

javascript - 如何将 cucumber 报告添加到 Cypress

javascript - 在 javascript 上连接 href 字符串

javascript - 谷歌地图标记未定义

javascript函数返回表单输入元素不起作用

javascript - xml 到 json 转换中不需要的字段?