我已經在Rails中開始了我的TDD之旅,並且遇到了一個關於模型驗證測試的小問題,我似乎找不到解決方案。比方說,我有一個用戶模式,Rails 3.1,RSpec:測試模型驗證
class User < ActiveRecord::Base
validates :username, :presence => true
end
和一個簡單的測試
it "should require a username" do
User.new(:username => "").should_not be_valid
end
這正確測試存在驗證,但如果我想更具體的是什麼?例如,在錯誤檢測full_messages對象..
it "should require a username" do
user = User.create(:username => "")
user.errors[:username].should ~= /can't be blank/
end
我關於初始嘗試(使用should_not be_valid)關注的是,RSpec的不會產生描述性錯誤消息。它只是說「預計有效?返回假,是真的。」但是,第二個測試示例有一個小缺點:它使用create方法而不是新方法來獲取錯誤對象。
我希望我的測試能夠更具體地瞭解他們正在測試的內容,但同時不必觸摸數據庫。
任何人有任何輸入?
非常感謝馬修。有沒有辦法接近我試圖測試的錯誤? X.should_not be_valid對我來說似乎很通用,誰知道在路上會有什麼事會使記錄失效。這個測試然後會在錯誤的地方失敗。順便說一下,我想我已經將你的答案標記爲已接受。我不是嗎? – Feech
對,所以這就是我爲什麼要爭取工廠的原因。您編寫代碼以在一個地方生成一個有效的用戶,然後您編寫一個測試以確保在所有單個測試之前確保其有效,從而確保您可以使其失效。這樣,如果由於某種原因,你改變了你的模型,所以工廠更長的時間產生一個有效的用戶'Factory.build(:user).should be_valid'測試將失敗,你會知道你必須更新你的工廠...得到它? (是的,你接受了我的答案) – Matthew
完美的解釋。再次感謝。 – Feech