我如何在 Capybara 中测试页面是否*未*重新加载(JavaScript onClick 拦截已起作用)?

2024-03-14

我用的是水豚、黄瓜和恶作剧。我正在测试附加到表单提交按钮的 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:

我发现我的这个旧答案奇怪地似乎没有回答实际问题,而是相反(检查页面has重新加载)。这就是我们当前在应用程序中检查页面是否执行的操作not reload:

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 来添加类。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我如何在 Capybara 中测试页面是否*未*重新加载(JavaScript onClick 拦截已起作用)? 的相关文章

随机推荐

  • .NET Framework 4.6.2 和 .NET Standard 2.0 不兼容

    项目目标 NET框架4 6 2 项目使用 NuGet 包 Entity Framework Core 引用 NET 标准 2 0 它出现在packages folder 据我所知 NET 4 6 2 and NET 标准 2 0不兼容 它会
  • D3 中的鼠标事件和画笔

    我目前正在尝试自定义时间序列图表的示例 该示例位于http nvd3 com ghpages lineWithFocus html http nvd3 com ghpages lineWithFocus html 这是使用 d3 之上的库
  • Reactjs 和砌体布局 - 未定义

    我已经在 masonry layout 上完成了 npm 安装 但是当我渲染这个组件时 它出现了一个元素未定义的错误 无法设置未定义的属性 元素 这是一个jsfiddle http jsfiddle net 0ht35rpb 82 http
  • 通过维护顺序来聚合重复记录,并且还包括重复记录

    我正在尝试解决一个有趣的问题 很容易只做一个 groupBy 来进行聚合 如求和 计数等 但这个问题略有不同 让我解释 这是我的元组列表 val repeatSmokers List String String String String
  • 仅允许在 JSON 架构中声明的属性

    我正在使用 json schema 并且只想允许在此文件中声明的属性通过验证 例如 如果用户在其 json 对象中传递 name 属性 则此架构将失败 因为 name 未在此处作为属性列出 是否有一些类似于 required 的函数只允许列
  • 提取特定字符串后的数字

    我需要找到字符串 Count of 后面的数字 计数 字符串和数字之间可能有空格或符号 我有一些可以在 www regex101 com 上使用但不能与 stringr 一起使用的东西str extract功能 library string
  • 编程高尔夫:玩俄罗斯方块

    Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 基础知识 考虑以下四格骨牌和空的比赛场地 0123456789 I O Z T L S J
  • 如何在 celery task.apply_async 中使用优先级

    我有一个testcelery 中的队列 我为它定义了一个任务 celery app task queue test ignore result True def priority test priority print priority 它
  • playOrm 基本设置 + playOrm 成熟度 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • LSB 中是否有 RPM 文件命名约定?

    RPM 是 LSB 中的包格式 但 LSB 是否强制 RPM 的任何命名标准 类似于 http www rpm org max rpm ch rpm file format html http www rpm org max rpm ch
  • cdata-section-elements 不工作

    我试图通过设置全局参数在通过 XSLT 使用 Saxon HE v9 7 0 14 生成的 xml 文件中设置密码 密码可以包含任何字符 因此需要将其放在CDATA部分 我试图通过设置来实现这一点cdata section elements
  • 删除表格单元格的边框

    我知道这是一个愚蠢的问题 但我似乎完全忘记了该怎么做 我有一个 HTMLtable我想删除所有单元格周围的所有边框 以便整个表格周围只有一个边框 我的代码如下所示 table border 1 width 500 tr th h1 Your
  • Silverlight 3 替代 FileVersionInfo.GetVersionInfo

    在 Silverlight 3 0 应用程序中 我想使用程序集文件版本 http msdn microsoft com en us library system reflection assemblyfileversionattribute
  • 从 History api 接收的步骤数据与 google fit 不匹配

    我希望在我的应用程序中计算 google fit 步数 因为我使用的是 google 提供的 History api 我发现从历史 API 接收的步骤与 google fit 不匹配 即使我使用了 google 提供的相同代码 下面是我的代
  • 创建一个包含 JSONObject Android 中所有键的数组

    您好 我想创建一个 JSONObject 中所有键的数组 我的理解 如果我错了 请纠正我 是我需要将 JSONObject 转换为 Map 然后从中创建一个数组 有人知道如何做到这一点吗 无需转换JSONObject到 Map 然后创建一个
  • Node exceljs读取文件

    所以根据官方文档我应该能够使用以下方式读取Excel文档 read from a file var workbook new Excel Workbook workbook xlsx readFile filename then funct
  • ggplot2 +facet_:某些方面的反转轴?

    我想将三个子图组合成一个图 而分面将是一种自然的方法 然而 使用反转的 x 轴 这些子图之一会更容易 更自然地阅读 而我想不理会其他子图 有没有办法使用facet grid 或facet wrap 来完成此任务 我考虑过的另一种选择是 gr
  • 如何在flutter webview中打开应用程序链接?

    在 Flutter 中 我使用 flutter网页视图插件 https pub dartlang org packages flutter webview plugin启动一个 url 例如 flutterWebviewPlugin lau
  • Sizzle 和 document.querySelectorAll 有什么区别

    据我所知 嘶嘶声和querySelector querySelectorAll是 CSS 选择器 那么 加载 Sizzle 和执行以下操作有什么区别 Sizzle my CSS query and document querySelecto
  • 我如何在 Capybara 中测试页面是否*未*重新加载(JavaScript onClick 拦截已起作用)?

    我用的是水豚 黄瓜和恶作剧 我正在测试附加到表单提交按钮的 JavaScript 函数 该函数旨在捕获提交事件并阻止它 在后台执行 AJAX 请求 使用和不使用 AJAX 页面最终看起来都是一样的 但 AJAX 方法要快得多 并且不会中断浏