rspec at_least一旦使用条件不能正常工作

时间:2014-02-05 16:53:49

标签: rspec

有没有办法测试方法是否使用参数匹配器至少调用一次,如果该方法使用不同的参数调用其他时间。这是一个例子:

class A
  def test(a)
    puts "AAA"
  end
end

it "should work" do
  a = A.new
  expect(a).to receive(:test).with(1).at_least(:once)
  a.test 2
  a.test 1
  a.test 3
end

我只关心使用某个参数调用至少一次测试,但是第一次使用不匹配的参数调用测试时会出现期望失败。

更新 我想要做的更好的例子比这更复杂...我想对params进行自定义匹配......更像是

it "should work" do
  a = A.new
  expect(a).to receive(:test).at_least(:once).with(an_instance_of(Fixnum)) do |i|
    expect(i).to be > 2
  end
  a.test 2
  a.test 1
  a.test 3
end

当我过去使用mocha时,你可以将一个块传递给with方法来评估params。如果块返回false,则param期望失败。似乎rspec只允许你使用返回块检查params(当你使用and_call_original时会被忽略)。

1 个答案:

答案 0 :(得分:0)

我认为您需要使用as_null_object基本上忽略其他参数的调用。

更改行:

a = A.new

要:

a = A.new.as_null_object