2014-02-05 38 views
3

有没有一种方法来测试一个方法被调用至少一次与参数匹配器,如果该方法被调用其他参数不同的时间。这里有一个例子:rspec at_least曾经使用与条件不工作,因为我期望

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 

我只是担心,试验是用一定的PARAM至少调用一次,但我得到的预期失败第一次测试称与不匹配的参数。

UPDATE 的就是我想要做的比这一点更复杂的一个更好的例子......我想要做自定义对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 

当我在过去使用摩卡时,可以将块传递给with方法来评估参数。如果该块返回false,则参数期望失败。看起来rspec只允许你使用返回块检查参数(当你使用and_call_original时会被忽略)。

回答

0

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

更改行:

a = A.new 

要:

a = A.new.as_null_object 
+0

也没有工作,但它会导致对象变成一个完整的模拟对象。这意味着我不能再使用and_call_original。另外,文档说,它只适用于应启用语法。 –

+0

还有一件事,如果我想对传递给它的参数使用更复杂的期望,那么这是行不通的。请参阅我对原始帖子的更新。 –

相关问题