2009-06-26 65 views
0

什麼是測試模型在rails中是否有效的最佳實踐方法?例如,如果我有一個用戶模型驗證email_address屬性的唯一性,那麼如何檢查發佈的表單是否返回了錯誤(或者更好,特別是爲該字段返回了錯誤)。Rails斷言表單有效

我覺得這應該是顯而易見的事情,但正如我很快發現的,我仍然沒有完全掌握有效的谷歌問題的詞彙。

回答

2

最簡單的方法很可能是:

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,並且只需在每個測試中實例化一個具有重複地址的新用戶。

您認爲合適的重構!

2

http://thoughtbot.com/projects/shoulda/

早該包括許多其他的東西一起進行測試之類的東西驗證宏。值得檢查TDD。

+0

應該是岩石!真正有用的插件,用於改進測試套件和編寫DRY測試。 – 2009-06-26 22:47:41

1

通過單元測試來測試模型當然是第一步。但是,這並不一定能保證用戶能夠獲得他們需要的反饋。

Section 4 of the Rails Guide on Testing有很多關於功能測試(即測試控制器和視圖)的良好信息。這裏有幾個基本的選項:檢查閃存是否有關於錯誤的消息,或者使用assert_select來查找在出現錯誤時應該生成的實際HTML元素。後者實際上是測試用戶真正獲得消息的唯一方法。