8

次のコードを RSpec テストに入れました。

it { should validate_format_of(:email).not_with('test@test')}

実際のクラスを次のようにセットアップします。

validates :email, :presence => true, :format => /\b[A-Z0-9._%-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,4}\b/i

テストを実行すると、次のようになります。

失敗: 1) ユーザーの失敗/エラー: it { should validate_format_of(:email).not_with('test@test')}エラー: ["name can't be blank (nil)", "email is invalid (\"test@test\")"] # ./spec/models/user_spec.rb:8:in `block (2 レベル)の '

次のような合格テストを行うと:

it { should validate_format_of(:email).with('adam@trimediatlantic.com')}

すべてが期待どおりに機能します。私が何か間違ったことをしているのか、それともフレームワークの問題なのか、誰か教えてもらえますか? ありがとうございました。

4

2 に答える 2

26

代わりにこれを試してください:

it { should_not allow_value("test@test").for(:email) }
于 2010-11-09T22:26:11.953 に答える
3

同様の問題に遭遇しましたwith_messageメソッドを呼び出して、正確なエラーメッセージを文字列として、またはエラーメッセージに一致する正規表現を提供する必要があることがわかりました。そうすることで、validate_format_of がフォーマット エラーの結果として「空白にすることはできません」というメッセージが表示されるという頑固な主張をやめるよう説得し、実際にパスします。例えば:

it { should validate_format_of(:email).not_with('test@test')}

になる

it { should validate_format_of(:email).not_with('test@test').with_message(/invalid/)}

これは確かに shoulda ライブラリのバグのようです。

于 2011-03-15T18:54:13.297 に答える