1

失敗したテストは次のとおりです。

context "when password does not match confirmation" do
  before { build(:user, :password_confirmation => 'mismatch') }
  it { should_not be_valid }
end

buildこのテストスイートにはファクトリーガールの方法を使用しています。

私のユーザーモデル:

class User < ActiveRecord::Base
  attr_accessible :email, :name, :password, :password_confirmation
  has_secure_password

  validates :password_confirmation, presence: true
  validates :password, presence: true, length: { minimum: 5 }
end

更新:has_secure_passwordを使用する場合、:passwordフィールドを:confirmation=>trueでマークする必要はありません。処理されます:ソースコードを参照してください:https ://github.com/rails/rails/blob/master/activemodel/lib/active_model/secure_password.rb

検証は正常に機能しています。コンソールで新しいユーザーを作成しようとすると、正しいエラーメッセージが表示されます。では、なぜテストが失敗するのでしょうか。バグはどこにありますか?

4

1 に答える 1

4

検証は正常に機能していません。password_confirmation一致することを検証していませんpassword。詳細については、http: //guides.rubyonrails.org/active_record_validations_callbacks.html#confirmationを参照してください。

また、テストしたいものを実際にテストしていることを確認する必要があります。これらのテストの対象はbuild(:user)、必要なときにbuild(:user, password_confirmation: 'mismatch')です。before上記のコードのをに変更しsubjectて、テストの対象を正しく設定します。

于 2013-01-20T03:14:46.013 に答える