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]中找到。
我實際上想檢查錯誤信息是否正確(應該是:'無效'),這就是爲什麼我故意讓這個測試失敗(通過傳遞一個不正確的電子郵件地址),我確信錯誤信息會出現在'user.errors [:email]'中,但這似乎不是真的,這就是爲什麼我要比較最後一行中的兩條錯誤消息 – loxosceles 2014-10-13 21:17:18
然後,你應該將這兩個斷言拆分成兩個獨立的測試方法:assert_match失敗並且assert_equal不會運行。 – blowmage 2014-10-21 19:20:45