2010-04-07 55 views
3

摘要:失敗的單元測試告訴我哪個斷言(文件:行)失敗,但不是哪個驗證導致失敗。如何在我的Rails單元測試中顯示失敗的驗證?

更多信息:我在我的一個模型中有11個驗證。單元測試很好,不管我運行的是rake test:units --trace還是ruby -Itest test/unit/mymodel_test.rb。然而,儘管它告訴我哪個assert失敗了,但我沒有被告知哪個驗證失敗。我必須錯過一些明顯的東西,因爲我不能很好地向Google詢問這個問題以獲得答案。

謝謝:)

回答

6

我認爲,你想要的是這樣的:

assert person.valid?, person.errors.full_messages.inspect

如果人模式是無效的,而錯誤信息打印出來給你看。

+0

這很有用,但是當full_messages是一個數組時,並沒有考慮到這一點。我會在下面發表一個答案。 – 2012-08-02 22:42:04

+2

我編輯了答案,包括對'''inspect'''的調用。 – juanpaco 2012-08-02 22:54:16

2

您可以隨時查看無效屬性的對象錯誤。

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文檔以瞭解更多信息。

+0

謝謝,Oshuma。雖然這並不是我所需要的,但它的確讓我嘗試了單元測試的調試器。 – 2010-04-07 16:58:05

3

爲了打印一個或多個校驗失敗,使用這樣的測試:

test "post with neither name nor title" do 
    p = Post.new 
    assert p.valid?, p.errors.full_messages.inspect 
    end