2013-03-10 32 views
0

測試用戶名驗證我有我的用戶模型以下驗證:不能與TestUnit

validates :name, :format => { 
    :with => /^[a-zA-Z]+$/, 
    :message => 'Only letters allowed.' 
    } 

這裏是我的測試:

test 'name must consist of letters only' do 
    user = User.new(:name => 'test123') 
    assert user.errors[:name].any? 
    end 

測試總是失敗。我做錯了什麼? xD

回答

2

你的斷言與它應該是相反的。反轉你的斷言的條件。

試試這個

test 'name must consist of letters only' do 
    user = User.new(:name => 'test123') 
    assert !user.valid? 
end 

另外,嘗試使用validates_format_of代替validate

validates_format_of :name, :with => /^[a-zA-Z]+$/, :message => 'Only letters allowed.' 
+0

這裏是我的邏輯:我驗證名稱只是字母。在測試中,我添加名稱'test123',所以必須有錯誤:名稱。所以錯誤。必須返回true。斷言是真實的。我在哪裏做錯了? – konnigun 2013-03-10 14:49:42

+0

@Konnigun對不起 - 我瘋了,很困惑。給我一點時間。 – 2013-03-10 14:51:14

+0

@Konnigun - 嘗試使用'valid?'方法代替我編輯過的。 – 2013-03-10 14:55:47

0

我想通了什麼我的問題是:
我應該已經做user.valid?user.invalid?user.save嘗試之前訪問user.errors。上面的這些命令實際上會產生錯誤,之後我可以訪問它們。
最終結果:

validates_format_of :name, :with => /^[a-zA-Z]+$/, :message => 'Only letters allowed' 

    test 'name must consist of letters only' do 
    user = User.new(:name => 'test123') 
    user.save 
    assert user.errors[:name].any? 
    end 
+1

哦,是的!我沒有意識到我們沒有調用「保存」。該死的。 – 2013-03-10 16:26:52

+0

哈哈你們,有趣的東西,所以跛腳^^ – konnigun 2013-03-10 16:34:21