我使用的是设计gem(认证)。我正在实现重置密码的自定义验证。用户不能用现有密码重置新密码。用户模型代码为:
class User < ActiveRecord::Base
include ActiveModel::ForbiddenAttributesProtection
validate :check_existed_password
def check_existed_password
if User.find_by_email(self.email).valid_password?(password)
errors.add(:password, "password already existed, try other")
end
end
end
运行rspec后,我得到错误:Failure/error: no_email_user。should_not be_validNoMethodError:未定义的方法valid_password?' for nil:NilClass。user_spec中所有已经存在的测试用例。Rb文件失败。有什么建议吗?
引用
要么email
不存在,要么您提供的email
没有与之关联的任何用户。这就是你得到错误的原因。在规范中,您正在检查no_email_user.should_not be_valid
意味着没有电子邮件的用户不应该有效。添加check_existed_password
的验证只需要在update
上运行,而不能在create上运行。所以改成:
validate :check_existed_password, :on => :update
因为用户将在更新操作时重置密码,而不是在创建操作时重置密码。目前,它将尝试查找尚未创建的用户,并每次抛出错误。