1

RSpec と Shoulda-matchers を使い始めたばかりですが、ここで何か問題が発生していると思います。

私のモデルには、このように検証されるメンバー、displayname があります。

validates :displayname, :presence => false #just for this test.

私の仕様では、私はこれを書きました

it { should validate_presence_of(:displayname) }

それでも過ぎていきます。should notに切り替えない限り、それは失敗するべきではありませんか?

編集:私が真か偽かを問わず、存在を検証すると言ったように振る舞っているようです。私はそれを should_not に変更し、存在チェックを完全に削除しない限り失敗し始めました。プレゼンスを検証する動作は、渡したブール値を使用しないだけですか?

4

3 に答える 3

1

はい、あなたは正しいです。検証では、任意のランダムな値を:presenceキーに渡すことができます。つまり、次のいずれかを追加しても、存在の検証が行われます。

  1. :name, :presence => false を検証します
  2. :name, :presence => true を検証します
  3. :name, :presence => 'random' を検証します
  4. :name, :presence => nil を検証します

(おそらく、上記の検証方法のより読みやすいバージョンのvalidates_presence_of :attr_nameは、そのような混乱を引き起こさないでしょう)

于 2013-04-23T19:42:44.387 に答える
1

shoulda-matchersのvalidates_presence_ofマッチャーは、値があるかどうかを確認するためにフィールドの検証を行いません。モデルに宣言された属性の存在に対する検証があることのみを確認します。検証が実際に機能するかどうかが気になる場合は、そのためにさらにテストが必要になります。

shouldこれが、アサーションを からに変更するとテストが失敗し始める理由ですshould_not

于 2013-04-23T20:22:02.550 に答える
0

テスト データベースが実際のスキーマを反映していないと思います。データベースを変更する移行を実行するたびに、テスト データベースを更新していることを確認してください。

rake db:test:prepare

また、spork を実行している場合は、それを停止してから再度開始して、すべてのものをリロードしてください。

于 2013-04-20T11:20:25.407 に答える