2017-07-26 25 views
2

我試圖寫一個很長時間的規範。Rspec期望收到帶有屬性的郵件並忽略其他郵件

我需要測試這一點:

expect(Foo).to receive(:bar).with(some_args) 

,一切會工作得很好,除非Foo收到bar只有一次。但它會收到bar多次肯定,這樣高的字符串失敗

#<Foo (class)> received :bar with unexpected arguments 

這些電話。

如何測試Foo收到bar的確切參數,我需要忽略其他情況?

回答

1

如何使用allow(Foo).to receive(:bar).and_call_original

例如,這些測試將順利通過:

class Foo 
    def boo(b) 
    b 
    end 
end 

describe Foo do 
    let(:a) { Foo.new } 

    before do 
    allow(a).to receive(:boo).and_call_original 
    end 

    it do 
    expect(a).to receive(:boo).with(2) 

    expect(a.boo(1)).to eq 1 
    expect(a.boo(2)).to eq 2 
    expect(a.boo(3)).to eq 3 
    end 
end 

如果添加expect(a).to receive(:boo).with(4)來將擋,測試將失敗。這看起來像你在找什麼,對吧?

+0

就是這樣。我以爲我嘗試過,但沒有成功。但我現在再試一次,一切都完成了,thanx! (我自己試過時一定忘了保存更改,因爲我確實已將此行註釋掉:)) – Ngoral

+0

不客氣:) –