2012-07-12 28 views
0

對於諸如it { should have(1).error_on(:base) }之類的東西以及特定的Shoulda匹配器,我仍然很困惑。Shoulda/RSpec:確保驗證消息「xxx」處於打開狀態:基地

我想確保:base包含錯誤消息「xxx」,所以我應該如何做到這一點?

it "should contain error message 'xxx'" do 
    contact.valid? 
    contact.errors[:base].should include('xxx') 
end 

這是「走的路」,還是有更好的?謝謝。

回答

5

對,它看起來不錯。內聯rspec測試正在使用主題。你可以像這樣重寫你的測試:

describe 'my method' do 
    before { contact.valid? } 

    context 'contact is not valid' do 
    subject { contact.errors[:base] } 
    it { should include 'xxx' } 
    end 
end 

對主題調用should方法。有時候它可以更具可讀性。並且您不必爲不言自明的規格書寫描述;-)

+0

感謝提示與主題和之前的過濾器。 – 2012-07-12 20:19:06

+0

更簡潔:it {subject.errors [:base] .should include'xxx'} – scarver2 2013-10-24 22:35:53

+0

.error [:whatever]現在返回一個數組,所以include不起作用,除非你匹配整個字符串。 – Xavier 2016-07-29 16:17:17