什麼是測試模型在rails中是否有效的最佳實踐方法?例如,如果我有一個用戶模型驗證email_address屬性的唯一性,那麼如何檢查發佈的表單是否返回了錯誤(或者更好,特別是爲該字段返回了錯誤)。Rails斷言表單有效
我覺得這應該是顯而易見的事情,但正如我很快發現的,我仍然沒有完全掌握有效的谷歌問題的詞彙。
什麼是測試模型在rails中是否有效的最佳實踐方法?例如,如果我有一個用戶模型驗證email_address屬性的唯一性,那麼如何檢查發佈的表單是否返回了錯誤(或者更好,特別是爲該字段返回了錯誤)。Rails斷言表單有效
我覺得這應該是顯而易見的事情,但正如我很快發現的,我仍然沒有完全掌握有效的谷歌問題的詞彙。
最簡單的方法很可能是:
class UserEmailAddressDuplicateTest < ActiveSupport::TestCase
def setup
@email = "[email protected]"
@user1, @user2 = User.create(:email => @email), User.new(:email => @email)
end
def test_user_should_not_be_valid_given_duplicate_email_addresses
assert [email protected]?
end
def test_user_should_produce_error_for_duplicate_email_address
# Test for the default error message.
assert_equal "has already been taken", @user2.errors.on(:email)
end
end
當然,這可能是你不希望創建一個單獨的測試案例此行爲,在這種情況下,你可以複製的設置方法的邏輯並將其包含在兩個測試中(或將其置於私有方法中)。
或者,您可以將第一個(引用)用戶存儲在夾具中,如fixtures/users.yml
,並且只需在每個測試中實例化一個具有重複地址的新用戶。
您認爲合適的重構!
http://thoughtbot.com/projects/shoulda/
早該包括許多其他的東西一起進行測試之類的東西驗證宏。值得檢查TDD。
通過單元測試來測試模型當然是第一步。但是,這並不一定能保證用戶能夠獲得他們需要的反饋。
Section 4 of the Rails Guide on Testing有很多關於功能測試(即測試控制器和視圖)的良好信息。這裏有幾個基本的選項:檢查閃存是否有關於錯誤的消息,或者使用assert_select來查找在出現錯誤時應該生成的實際HTML元素。後者實際上是測試用戶真正獲得消息的唯一方法。
errors.on是你想要的
http://api.rubyonrails.org/classes/ActiveRecord/Errors.html#M002496
@ obj.errors.on(:電子郵件)將返回nil是否爲合法的,並且錯誤消息無論是在字符串的字符串數組或如果有一個或多個錯誤。
應該是岩石!真正有用的插件,用於改進測試套件和編寫DRY測試。 – 2009-06-26 22:47:41