2012-11-05 42 views
0

我有rspec測試插入或返回第一個記錄的方法,如果具有給定屬性的記錄不存在。它看起來像這樣如何測試在數據庫中插入?

context 'user doesn't exists' do 
    subject { User.find_or_create(name: "Jonh", login: "john") } 

    it { should be_an_instance_of(User) } 
    //and here I want to test that new user was inserted into database... 

end 

但我無法弄清楚如何在此使用expect to change

+0

你爲什麼要測試?通常你應該只創建它? – Lichtamberg

+0

我想檢查我的代碼是否應該創建新記錄。爲什麼我不想測試它? –

回答

1

我通常測試的方法就是通過尋找這些對象的個數發生變化:

it "creates a new user object" do 
    expect { 
    User.find_or_create(name: "John", login: "john") 
    }.to change{User.count}.by(1) 
end 

誠然,它不適合那麼好與你已經開始用subject模式,但當您測試某個方法導致系統狀態發生變化時,而不是測試該對象是否具有某些屬性時,這是一個必要的罪惡。

相關問題