对于valid_password的设计模型自定义验证,Rspec失败



我使用的是设计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

因为用户将在更新操作时重置密码,而不是在创建操作时重置密码。目前,它将尝试查找尚未创建的用户,并每次抛出错误。

相关内容

  • 没有找到相关文章

最新更新