Rspec无法为valid_password进行Devise模型自定义验证?

时间:2015-07-14 06:25:52

标签: ruby-on-rails rspec rspec2 rspec-rails rspec3

我正在使用设计宝石(身份验证)。我正在为重置密码实现自定义验证。用户无法使用现有密码重置新密码。 在用户模型代码中:

 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后,我收到错误:失败/错误:no_email_user.should_not be_valid    NoMethodError:        未定义的方法`valid_password?'为零:NilClass。 user_spec.rb文件中的所有预先存在的测试用例都将失败。有什么建议吗?

  

块引用

1 个答案:

答案 0 :(得分:0)

email不存在或您提供的email没有任何与之关联的用户。这就是你为错误辩护的原因。在您检查的规范中,no_email_user.should_not be_valid表示没有电子邮件的用户不应该有效。您添加的check_existed_password验证只需在update上运行,而不是在创建时运行。所以把它作为:

validate  :check_existed_password, :on => :update

由于用户将在更新操作时重置密码而不在创建时重置密码。 目前它将尝试找到尚未创建的用户并且每次都抛出错误。

希望这有帮助。