为什么我的rspec测试无法通过用户确认?

时间:2013-01-20 03:08:47

标签: ruby-on-rails-3 authentication rspec

这是失败的测试:

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

我正在使用Factory Girl的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

更新:您无需使用以下标记:密码字段:confirmation =&gt;使用has_secure_password时为true。需要注意的是:请参阅源代码:https://github.com/rails/rails/blob/master/activemodel/lib/active_model/secure_password.rb

验证工作正常 - 当我尝试在控制台创建新用户时,我收到了正确的错误消息。那么为什么测试失败了呢?错误在哪里?

1 个答案:

答案 0 :(得分:3)

验证工作不正常,您未验证password_confirmation是否与password匹配。有关详细信息,请参阅http://guides.rubyonrails.org/active_record_validations_callbacks.html#confirmation

此外,您需要确保实际测试的是您要测试的内容 - 当需要build(:user)时,这些测试的主题为build(:user, password_confirmation: 'mismatch')。将上述代码中的before更改为subject,以便正确设置测试主题。