如何使用 rspec + capybara 重用不同功能中的场景

2024-02-10

假设我有一些场景想要在不同的上下文或“功能”下进行测试。

例如,我有一些场景涉及用户访问某些页面并期望某些 ajax 结果。

但是,在不同的条件或“功能”下,我需要执行不同的“后台”任务来更改应用程序的状态。

在这种情况下,我需要一遍又一遍地运行相同的场景,以确保一切都能适应应用程序状态的不同变化。

有没有办法在某处定义场景,然后重用它们?


您可以使用以下方法创建在多个功能中使用的可重用场景分享的例子 https://www.relishapp.com/rspec/rspec-core/v/2-6/docs/example-groups/shared-examples.

下面是一个取自 relishapp 页面的基本示例。正如您所看到的,在多个功能中使用相同的场景来测试不同的类 - 即运行了 6 个示例。

require 'rspec/autorun'
require "set"

shared_examples "a collection" do
  let(:collection) { described_class.new([7, 2, 4]) }

  context "initialized with 3 items" do
    it "says it has three items" do
      collection.size.should eq(3)
    end
  end

  describe "#include?" do
    context "with an an item that is in the collection" do
      it "returns true" do
        collection.include?(7).should be_true
      end
    end

    context "with an an item that is not in the collection" do
      it "returns false" do
        collection.include?(9).should be_false
      end
    end
  end
end

describe Array do
  it_behaves_like "a collection"
end

describe Set do
  it_behaves_like "a collection"
end

relishapp 页面上有几个示例,包括使用参数运行共享示例(复制如下)。我猜测(因为我不知道您的确切测试)您应该能够在执行这组示例之前使用参数来设置不同的条件。

require 'rspec/autorun'

shared_examples "a measurable object" do |measurement, measurement_methods|
  measurement_methods.each do |measurement_method|
    it "should return #{measurement} from ##{measurement_method}" do
      subject.send(measurement_method).should == measurement
    end
  end
end

describe Array, "with 3 items" do
  subject { [1, 2, 3] }
  it_should_behave_like "a measurable object", 3, [:size, :length]
end

describe String, "of 6 characters" do
  subject { "FooBar" }
  it_should_behave_like "a measurable object", 6, [:size, :length]
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 rspec + capybara 重用不同功能中的场景 的相关文章

随机推荐

  • 如何获取今天到目前为止经过的毫秒数

    我想获取当前时间和日期 以毫秒为单位 我怎样才能得到这个 我试过这个 Date date new Date System out println Today is date getTime 它将返回 1970 年 1 月 1 日以来的毫秒数
  • 将一种样式类指向另一种样式类?

    我有一个 css 类 例如 foo background color red 然后我为列表指定了一个类 list1 li background color tan 是否可以将一个样式类设置为仅指向另一个样式类 就像是 list1 li fo
  • 设置详细/自定义错误消息问题,iis 7 asp classic

    我在任何地方都找不到类似的问题 基本上 当我将网站设置为自定义错误时 它会显示默认的 500 错误消息 但是当我将其设置为显示详细错误时 页面加载正常 不会出现错误 还有其他人遇到过这个吗 我怎样才能看到错误是什么 IN IIS 打开IIS
  • 设置 xdebug 会话 cookie 时停止 chrome 的解决方法?

    这个情况有点具体 不知道有没有人遇到过以下情况 设置 xdebug 会话 cookie 后 Chrome 开始停止 cookie 可能是之前调试留下的 当不使用调试时 所有请求 ajax 或 正常 都会变慢 开始接收前 15 秒到 2 分钟
  • 如何使用 React Router 6 进行 404 重定向? [复制]

    这个问题在这里已经有答案了 在 React Router 5 中我可以使用
  • 如何按照约定首先删除代码中外键字段的下划线

    我的项目中有多个课程 包括 TPT 每个 POCO 都有一个BaseClass 其中有一个GUID 称为GlobalKey 作为主键 首先我用的是DataAnnotations创建正确的外键 但随后我在将相应的 GUID 与对象本身同步时遇
  • PHP 7.2 CURLFile 给出“无效文件名”警告

    我在使用 CURLFile 对象时遇到问题 curl file create 我尝试了多种方法 但无论我尝试什么 我最终都会在日志文件中收到 PHP 警告 并且该文件在我的 cURL 调用中被忽略 首先 一些信息 PHP 7 2 文件已确认
  • 每次查询后重新打开sqlite数据库的效率

    我目前正在龙卷风中的网络服务器上工作 但在尝试同时访问数据库的不同代码位时遇到问题 我通过简单地使用一个查询函数来简化这一点 该函数基本上可以执行此操作 但稍微更高级 def query command arguments db sqlit
  • 有没有办法在延迟运算符之后“取消”流

    我在使用 NgRx 的 Angular 应用程序中使用轮询方案 为了简化事情 我有如下内容 public stopPolling createEffect gt this actions pipe ofType actions stopPo
  • 有没有办法使用Python openpyxl从excel读取持续时间类型字段?

    我正在尝试从 Excel 文件读取持续时间字段 但我得到的是日期时间类型 而不是 timedelta 类型 因此 当持续时间值超过 24 小时时 python openpyxl 无法正确读取该字段 有没有使用 Python openpyxl
  • Yii2如何向外部url发送表单请求

    如何向外部 URL 发送重定向 POST 请求 我在控制器中的代码 if model gt load Yii app gt request gt post model gt validate send post request to ext
  • 如何延迟分配归零内存?

    据我了解 我必须做出选择calloc 这将分配归零内存 并且malloc 可以按需分配内存 是否有一个函数结合了这两个属性 或许可以直接拨打电话mmap 如果可以的话为什么calloc不做吗 有几种机制可以从操作系统获取预清零内存 mmap
  • JavaScript 服务器端?

    是否有可能使用 javascript 服务器端 从而不会在某些核心计算的页面源代码中显示 我正在开发一款游戏 代码的一个关键部分只需要在服务器端计算然后传回客户端 我的整个游戏都是用 Javascript 编写的 但大部分是客户端 这很好
  • 如何使用 blazor 读取剪贴板?

    我正在使用具有截屏功能的 Blazor Server 应用程序 我的目标是从剪贴板获取数据 我谈论的不仅是简单的文本 而且总体上是一些图像 文件 文本等 我有一个名为ClipboardService它使用Microsoft JSIntero
  • 如何在 C# 中读取 html 表 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions table thead tr td
  • Clojure 中的数字是否按区间排列?

    有没有比以下更好的方法 defn in interval Returns a predicate that tests if its argument falls in the inclusive interval a b a b fn x
  • 绘制箱线图时如何处理 NaN 值

    我正在使用 matplotlib 绘制框图 但有一些缺失值 NaN 然后我发现它不显示具有 NaN 值的列内的方框图 你知道如何解决这个问题吗 这是代码 import numpy as np import matplotlib pyplot
  • Python套接字无法正确关闭连接

    我是套接字编程的新手 遇到了一个令人费解的问题 我有一个 Windows 程序 我无法更改它 专有软件 但它尝试使用 tcp 套接字连接到特定的 ip 和端口 在我的 linux 机器上 我编写了一个小 python 脚本来为 win pr
  • 删除具有特定值的字典键[重复]

    这个问题在这里已经有答案了 我知道字典不应该以这种方式使用 因此没有内置函数可以帮助执行此操作 但我需要删除字典中具有特定值的每个条目 所以如果我的字典看起来像 NameofEntry1 0 NameofEntry2 DNC 我需要删除 可
  • 如何使用 rspec + capybara 重用不同功能中的场景

    假设我有一些场景想要在不同的上下文或 功能 下进行测试 例如 我有一些场景涉及用户访问某些页面并期望某些 ajax 结果 但是 在不同的条件或 功能 下 我需要执行不同的 后台 任务来更改应用程序的状态 在这种情况下 我需要一遍又一遍地运行