Rspec Matcher for "any_one_of" ?



Ruby 规范定义了 3 个instance_doubles:

let(:doub1) { instance_double(Foo) }
let(:doub2) { instance_double(Foo) }
let(:doub3) { instance_double(Foo) }

shared_example旨在确保协作者与以下任何instance_doubles一起使用:

shared_examples :a_consumer_of_bars do
  it "passes a Foo to the BarGetter" do
    expect(BarGetter).to receive(:fetch_bar)
      .with((condition1 || condition2 || condition3)).at_least(:once)
    subject
  end
end

(管道||参数||方法(不起作用。是否有现有的 rspec 匹配器用于检查参数是否与数组的元素匹配?还是编写自定义匹配器是要走的路?

我会使用自定义匹配器,因为它看起来很不寻常。

piped||arguments||approach显然不起作用,因为它返回第一个非假元素。在您的情况下,无论哪个双精度在管道||顺序中排在第一位。

另外,这让我想知道为什么你需要这样的东西,你不能完全控制你的规格吗?为什么BarGetter.fetch_bar会被不确定地(随机地?(选择的对象来调用?

也许这里的其他匹配者之一 https://relishapp.com/rspec/rspec-mocks/v/3-7/docs/setting-constraints/matching-arguments即

expect(BarGetter).to receive(:fetch_bar).with(instance_of(Foo))

会更适合您的规格吗?

当现有匹配器不能满足您的要求时,您可以将块传递给期望并对参数运行期望

expect(BarGetter).to receive(:fetch_bar) do |arg|
  expect([condition1, condition2, condition3]).to include(arg)
end

相关内容

  • 没有找到相关文章

最新更新