这是失败的测试:
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
验证工作正常 - 当我尝试在控制台创建新用户时,我收到了正确的错误消息。那么为什么测试失败了呢?错误在哪里?
答案 0 :(得分:3)
验证工作不正常,您未验证password_confirmation
是否与password
匹配。有关详细信息,请参阅http://guides.rubyonrails.org/active_record_validations_callbacks.html#confirmation。
此外,您需要确保实际测试的是您要测试的内容 - 当需要build(:user)
时,这些测试的主题为build(:user, password_confirmation: 'mismatch')
。将上述代码中的before
更改为subject
,以便正确设置测试主题。