【问题标题】:Is there a way to use a matcher like 'Verify' in rspec?有没有办法在 rspec 中使用像“验证”这样的匹配器?
【发布时间】:2019-07-04 15:53:51
【问题描述】:

到目前为止,我在我的测试框架中使用“expect”,当它遇到失败条件时会停止执行。我想要类似的东西,即使它满足失败条件也应该执行。我可以看到在 rspec 中有一个名为“Verify”的匹配器,我需要继承“Test::Unit::TestCase”类,但我的问题是,我需要我的规范文件中的匹配器,它不是写在红宝石类。

【问题讨论】:

  • 我想知道为什么有人需要在失败后进行测试......只是好奇。
  • @microspino 假设它在某些数字验证中失败,但我希望该套件完全运行,以便检查工作流程中是否存在任何其他不等式。它将有助于一次性修复所有故障,因为它会在一轮执行中挖掘所有内容。但是,是的,它有它自己的优点和缺点。
  • 如果您要比较像散列、数组这样的对象,您可以使用 match/eq,它会向您显示差异,如果您在一次调用中有多个期望,您可以通过将它们拆分为多个测试期望在每个 it 块中调用,记住这会增加测试时间。
  • 这不仅仅是获取差异,而是让套件执行,即使它满足失败条件。而且,是的,我在我的测试套件中使用了“match”和“eq”匹配器。由于这里的每个匹配器都伴随着'expect',所以一旦失败条件满足,它就会停止执行。

标签: ruby selenium selenium-webdriver rspec matcher


【解决方案1】:

没有办法用 RSpec 做到这一点,开箱即用。 因为 Rspec 旨在测试小型、孤立的逻辑。

在失败时,Rspec 匹配器会引发错误,因此您可以做的是将匹配器包装在救援块中。 为了满足您的需要,您可以编写如下包装器:

def report_last(&block)
  begin
    yield
  rescue Exception => e
    puts "Failure: #{e}"
  end
end

在您的测试用例中:

describe Calculator do
  it “should add 2 numbers” do
    report_last do
      expect(described_class.new(2, 3).sum)to eq(5)
    end
  end
end

【讨论】:

    猜你喜欢
    • 2012-02-15
    • 2016-11-11
    • 2021-12-06
    • 2022-11-20
    • 2020-04-09
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    • 2021-05-18
    相关资源
    最近更新 更多