2012-10-09 12 views
1

昨天我和我的一位朋友正在討論這個問題,我們沒有得出結論。在測試中,我們使用RSpec情況下,布爾方法,我想知道是用點:斷言布爾方法有什麼意義?

it 'should process the payment' do 
    payment.processed?.should eq(true) 
end 

的一步都得確認付款被處理,所以我只去了:

it 'should process the payment' do 
    payment.processed? 
end 

現在,我可能在這方面是錯誤的,但是,步驟有點像布爾方法,你希望它們返回true,所以我想知道檢查「true是真的」有什麼意義,我的意思是你已經在那裏得到了真實,對?

那麼,您怎麼看?

回答

2

步驟不是期望返回true的布爾方法。所有的行動都發生在should方法中 - 它執行測試並確定成功或失敗。

這就是爲什麼你可以在一個it塊中有多個should s(儘管通常最好不要,如果可以避免的話)。

例如:

it "doesn't use return values" do 
    false.should be_true # the test fails immediately here 
    true.should be_true # this never gets called 
end 

我也建議重寫使用​​方法,通過tokland的建議。

3

的慣用方式符合規格布爾方法(arbitrary predicates)是:

it 'should process the payment' do 
    payment.should be_processed 
end 

注意,所以它不是測試任何(其他已成功執行的代碼)你的第二個片段不叫rspec的期望。我認爲你認爲it塊會檢查它的返回值,但事實並非如此。

+0

是的,這就是我所設想的,猜想還有很多東西需要學習,謝謝! :P –

1
it "should process the payment" do 
    payment.should be_processed 
end 

當你有那麼表單be_xxx的匹配(除非有一些更具體的設置)rspec的將檢查subject.xxx?是truthy。

如果你沒有電話應該在你的規範,那麼你沒有測試任何東西:如果處理?返回false規範會通過