2009-06-26 11 views
0

モデルがレールで有効であることをテストするベストプラクティスの方法は何ですか?レールはフォームが有効であると主張します

たとえば、email_addressプロパティの一意性を検証するUserモデルがある場合、フォームを転記するとエラーが返されたことを確認するにはどうすればよいですか?

私はこれが何か明白であるべきだと感じますが、私がすぐに分かっているように、私はまだ効果的なグーグルルビーの質問に必要な語彙はまだありません。

答えて

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/

Shouldaは、他の多くのものと一緒にバリのようなものをテストするためのマクロが含まれています。 TDDのチェックアウトに値する

+0

Shoulda rocks!テストスイートの改善とDRYテストの作成に役立つプラグイン。 –

1

単体テストによるモデルのテストは、もちろん、ステップ1です。しかし、それは必ずしもユーザーが必要とするフィードバックを得ることを保証するものではありません。

Section 4 of the Rails Guide on Testingには、機能テスト(コントローラとビューのテスト)に関する多くの優れた情報があります。ここにはいくつかの基本的なオプションがあります:フラッシュにエラーに関するメッセージがあることを確認するか、assert_selectを使用してエラーが発生したときに生成されるはずの実際のHTML要素を探します。後者は実際にユーザーが実際にメッセージを受け取ることをテストする唯一の方法です。

関連する問題