satisfy 匹配器

satisfy 匹配器非常灵活,可以处理几乎所有你想要指定的内容。如果提供的代码块返回 true,则通过。

  expect(10).to satisfy { |v| v % 5 == 0 }
  expect(7).not_to satisfy { |v| v % 5 == 0 }

默认的失败消息(“预期 [实际] 满足代码块”)不是很有描述性或帮助。要添加说明,你可以提供自己的描述作为参数。

  expect(10).to satisfy("be a multiple of 5") do |v|
    v % 5 == 0
  end

基本用法

给定一个名为“satisfy_matcher_spec.rb”的文件,其中包含

RSpec.describe 10 do
  it { is_expected.to satisfy { |v| v > 5 } }
  it { is_expected.not_to satisfy { |v| v > 15 } }

  # deliberate failures
  it { is_expected.not_to satisfy { |v| v > 5 } }
  it { is_expected.to satisfy { |v| v > 15 } }
  it { is_expected.to_not satisfy("be greater than 5") { |v| v > 5 } }
  it { is_expected.to satisfy("be greater than 15") { |v| v > 15 } }
end

我运行 rspec satisfy_matcher_spec.rb

输出应包含所有这些内容

6 个示例,4 个失败
预期 10 不满足表达式 v > 5
预期 10 满足表达式 v > 15
预期 10 不大于 5
预期 10 大于 15