2014-02-05 37 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

還有一件事,如果我想對傳遞給它的參數使用更復雜的期望,那麼這是行不通的。請參閱我對原始帖子的更新。 –

相關問題