2014-10-11 54 views
0

這是一個絕對的初學者問題,可能很明顯,但我找不到答案。Ruby on Rails:用於電子郵件驗證的MiniTest

我想在使用minitest的Ruby on Rails中驗證電子郵件地址。

test "should have format of email address" do 
    user = User.create(name: "Dummy", last_name: "Dummy", email: "example.com") 
    assert_match(/\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i, user.email) 
    assert_equal ["is invalid"], user.errors[:email] 
end 

問題發生在最後一行assert_equal ["is invalid"], user.errors[:email]

電子郵件地址example.com與目的不匹配正則表達式,因爲我想檢查錯誤消息「是無效的」對一個失敗的測試,但我不知道如何將它傳遞到assert_equal

錯誤消息:

Expected /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i to match "example.com". 

應該是:

'is invalid.' 

也許我錯了,但我我的理解是,誤碼M對象的消息可以在object.errors [:symbol]中找到。

回答

1

這個問題實際上出現在第二行:

assert_match(/\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i, user.email) 

您所使用的電子郵件爲「example.com」,它失敗REGEXP匹配。請嘗試使用類似「[email protected]」的內容。

+0

我實際上想檢查錯誤信息是否正確(應該是:'無效'),這就是爲什麼我故意讓這個測試失敗(通過傳遞一個不正確的電子郵件地址),我確信錯誤信息會出現在'user.errors [:email]'中,但這似乎不是真的,這就是爲什麼我要比較最後一行中的兩條錯誤消息 – loxosceles 2014-10-13 21:17:18

+0

然後,你應該將這兩個斷言拆分成兩個獨立的測試方法:assert_match失敗並且assert_equal不會運行。 – blowmage 2014-10-21 19:20:45