2012-10-04 66 views
0

我有一個簡單的測試,它似乎有不同的行爲取決於我是否使用明確的主題或不。RSpec暗示主題似乎失敗,明確的主題作品

context "successful validation" do 
    subject(:invitation) {invitations(:emmet_invite)} 
    after do 
    invitation.send_voucher 
    end 
    it "calls hotel_booked?" do 
    invitation.should_receive(:hotel_booked?).and_return(true) #works 
    end 

    it {should_receive(:hotel_booked?).and_return(true)} #fails 
end 

這裏有什麼問題?

+1

我花了很長時間才弄清楚你要在這裏測試什麼,因爲你已經把測試的主要動作埋在了「之後」的塊中。這可能是品味的問題,但我認爲在這種情況下,通過這樣做獲得的兩條或三條線是值得的。 –

+0

我明白你的觀點。我只是決定嘗試這種方式,因爲單線程更適合代碼中的其他測試(由其他開發人員製作)。 –

回答

1

見RSpec中,嘲笑這個問題的GitHub:https://github.com/rspec/rspec-mocks/issues/148

報價:加入

隱受到支持一條線路的期望,但我不相信這是以往任何時候都旨在與模擬使用期望。對於一個嘲諷的期望是有道理的,在它被設置後的示例中必須有一些代碼,所以對於一個襯裏使用它沒有任何意義。

所以基本上,你不能使用should_receive一個隱含的主題。

+0

非常感謝您的回答。 –

0

您可以使用subject獲得的隱性主題:

it { subject.should_receive(:hotel_booked?).and_return(true) } 

雖然這是不容易讀取,你明顯的例子。