-1

Railsテストの1つで問題が発生しています。以下は失敗しているがそうではないと叫ぶテストです。

setup do
  @answer = Answer.new(:title => 'Title', :body => 'Body', :email => 'you@me.com', :quiz_id => 1, :user_id => 1)
end

test 'should not save answer with missing email' do
  @answer.email = nil
  assert !@answer.save, 'answer was saved'
end

!@ answer.saveで保存が失敗することを確認していますが、これは機能していません。結果は次のエラーのある悪いテストです。

ActiveRecord::StatementInvalid: Mysql2::Error: Column 'email' cannot be null:

メールがないときにテストを保存しないようにしたい。どんな助けでも大歓迎ですありがとう。

4

1 に答える 1

1

MySQLテーブルのemail列は、null値を許可しないように設定されています。

answersテーブルを作成するための移行には、のようなものがありt.string :email, :null => falseます。

モデルがMySQLエラーを保存してトリガーしようとするのを防ぐために、検証を作成する必要があります。

試す、

validates_presence_of :email

これにより、モデルの保存が停止し、代わりにActiveRecord検証エラーメッセージが表示されます。

編集:

電子メールの値が常に存在することを保証できない場合は、検証が必要になります。電子メールの値が常に存在することを保証できる場合は、このシナリオが発生しないことを保証できるため、モデルでのテストは不要です。

このコードを呼び出すコードをテストしemailて、メソッドに常に値が提供されることを確認することをお勧めしAnswer.newます。

于 2013-03-24T14:52:37.143 に答える