モデルがレールで有効であることをテストするベストプラクティスの方法は何ですか?レールはフォームが有効であると主張します
たとえば、email_addressプロパティの一意性を検証するUserモデルがある場合、フォームを転記するとエラーが返されたことを確認するにはどうすればよいですか?
私はこれが何か明白であるべきだと感じますが、私がすぐに分かっているように、私はまだ効果的なグーグルルビーの質問に必要な語彙はまだありません。
モデルがレールで有効であることをテストするベストプラクティスの方法は何ですか?レールはフォームが有効であると主張します
たとえば、email_addressプロパティの一意性を検証するUserモデルがある場合、フォームを転記するとエラーが返されたことを確認するにはどうすればよいですか?
私はこれが何か明白であるべきだと感じますが、私がすぐに分かっているように、私はまだ効果的なグーグルルビーの質問に必要な語彙はまだありません。
最も簡単な方法は、おそらく次のようになります。セットアップ方法のロジックを複製することができ、その場合には、それはあなたがこの動作のための独立したテストケースを作成しないことも可能です。もちろん、
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/
Shouldaは、他の多くのものと一緒にバリのようなものをテストするためのマクロが含まれています。 TDDのチェックアウトに値する
単体テストによるモデルのテストは、もちろん、ステップ1です。しかし、それは必ずしもユーザーが必要とするフィードバックを得ることを保証するものではありません。
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 @(:Eメール)フィールドが有効であればnilを返し、エラーメッセージのいずれか文字列または文字列の配列でエラーが1つ以上ある場合。
Shoulda rocks!テストスイートの改善とDRYテストの作成に役立つプラグイン。 –