1

这是失败的测试:

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

我正在build为这个测试套件使用 Factory Girl 的方法。

我的用户模型:

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 时,您不需要用 :confirmation => true 标记 :password 字段。已处理:请参阅源代码:https ://github.com/rails/rails/blob/master/activemodel/lib/active_model/secure_password.rb

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

4

1 回答 1

4

验证不能正常工作,您没有验证password_confirmationpassword. 有关详细信息,请参阅http://guides.rubyonrails.org/active_record_validations_callbacks.html#confirmation

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

于 2013-01-20T03:14:46.013 回答