2012-01-02 7 views
2

RoRモデルのバリデーションをテストする例はたくさんあります。テストを複数のモデルにまたがってDRYにしておくことさえも。しかし、すでにテストされているRailsをテストするのではないのですか?Railsモデルバリデーションのテスト

@user = User.make 
@user.name = nil 

@user.should_not be_valid 

Railsの検証が機能するかどうかはテストしていませんか?

+0

複数のモデル間でテストを統一することは、今日の動作が同じであるという理由だけではお勧めできません。モデルが他のモデルとまったく同じように振る舞わなくなるたびに、テストと複数のモデルの間に作成された依存関係を展開するのは面倒です。基本的なテストを簡潔にするフレームワークを利用する方が良い方法です(例えば、@ wizard-of-ogzのようにshoulda)。 – Nick

答えて

7

Railsの検証が機能するかどうかはテストしていませんか?

重要な点は、モデルが名前の存在を検証していることをテストすることです。 Railsの検証、Rspecの動作、Rubyの動作、OSの動作、物理的なルールが突然変更されていないという事実も事実です。

+0

ありがとうございます。私はRubyでの動作を上書きすることができ、デフォルトフローを壊す可能性があることを理解しています。 –

2

あなたのモデルが検証を使用していることをテストすることが重要です。私は、あなたの例が検証自体をテストし、テストもやや曖昧だとあなたに同意します。

あなたがshoulda gemを使用している場合は、単にshould validate_presence_of(:name)を使用することができます。

1

update_attribute(update_attributeスキップの検証)を呼び出したプログラム内のメソッドを考えてみましょう。そのメソッドを呼び出すと、オブジェクトは無効な状態になりますが、データベースはまだ更新されます。有効な?/無効な?そのようなケースをキャッチするのに役立ちます。

関連する問題