摘要:失敗的單元測試告訴我哪個斷言(文件:行)失敗,但不是哪個驗證導致失敗。如何在我的Rails單元測試中顯示失敗的驗證?
更多信息:我在我的一個模型中有11個驗證。單元測試很好,不管我運行的是rake test:units --trace
還是ruby -Itest test/unit/mymodel_test.rb
。然而,儘管它告訴我哪個assert
失敗了,但我沒有被告知哪個驗證失敗。我必須錯過一些明顯的東西,因爲我不能很好地向Google詢問這個問題以獲得答案。
謝謝:)
摘要:失敗的單元測試告訴我哪個斷言(文件:行)失敗,但不是哪個驗證導致失敗。如何在我的Rails單元測試中顯示失敗的驗證?
更多信息:我在我的一個模型中有11個驗證。單元測試很好,不管我運行的是rake test:units --trace
還是ruby -Itest test/unit/mymodel_test.rb
。然而,儘管它告訴我哪個assert
失敗了,但我沒有被告知哪個驗證失敗。我必須錯過一些明顯的東西,因爲我不能很好地向Google詢問這個問題以獲得答案。
謝謝:)
我認爲,你想要的是這樣的:
assert person.valid?, person.errors.full_messages.inspect
如果人模式是無效的,而錯誤信息打印出來給你看。
您可以隨時查看無效屬性的對象錯誤。
class Person
validates_presence_of :name
end
person = Person.new
person.valid? # => false
person.errors[:name] # => "can't be blank"
person.errors.full_messages # => ["Name can't be blank"]
查看ActiveRecord::Errors文檔以瞭解更多信息。
謝謝,Oshuma。雖然這並不是我所需要的,但它的確讓我嘗試了單元測試的調試器。 – 2010-04-07 16:58:05
爲了打印一個或多個校驗失敗,使用這樣的測試:
test "post with neither name nor title" do
p = Post.new
assert p.valid?, p.errors.full_messages.inspect
end
這很有用,但是當full_messages是一個數組時,並沒有考慮到這一點。我會在下面發表一個答案。 – 2012-08-02 22:42:04
我編輯了答案,包括對'''inspect'''的調用。 – juanpaco 2012-08-02 22:54:16