当前位置: 首页 > 知识库问答 >
问题:

当我将此自定义验证添加到我的用户模型时,空rspec失败

章鸿光
2023-03-14

我有一个用户模型,如果我添加这个自定义验证,我的空rspec测试失败:

validate :password_complexity 

def password_complexity
    if !password.blank?
        errors.add(:password, "must contain a upper case character") if password.match(/[A-Z]/)
    end
end

Rspec:

require 'rails_helper'

RSpec.describe User, type: :model do

end

我运行rspec规范/模型/user_spec.rb,我得到:

/Users/blank/.rvm/gems/ /Users/blank/.rvm/gems /gems/activerecord-4.2.5/lib/active_record/validations.rb:79: inraise_record_invalid':验证失败:密码必须包含一个大写字符,密码必须包含一个小写字符(ActiveRecord::Record无效)从ruby-2.3.3@myapp/ /gems/activerecord-4.2.5/lib/active_recordruby-2.3.3@myapp/validations.rb:43: in保存!'from /Users/blank/.rvm/gems /gems/activerecord-4.2.5/lib/active_record/attribute_methods/dirty.rb:29: in保存!'from /Users/blank/.rvm/gems/ruby-2.3.3@myapp /gems/activerecord-4.2.5/lib/active_record/transactions.rb:291: inblock in保存!'从 /Users/blank/.rvm/gems/ /Users/blank/.rvm/gems /gems/activerecord-4.2.5/lib/active_record/transactions.rb:351:在with_transaction_returning_status'中的块'从 /Users/blank/.rvm/gems/ /gems/activerecord-4.2.5/lib/active_record /gems/activerecord-4.2.5/lib/active_record/connection_adapters/abstract/database_statements.rb:211:在事务'从ruby-2.3.3@myapp/ /Users/blank/.rvm/gemsruby-2.3.3@myapp/transactions.rb:220:在事务'从ruby-2.3.3@myapp/ /gems/activerecord-4.2.5/lib/active_recordruby-2.3.3@myapp/transactions.rb:348:在with_transaction_returning_status'从 /Users/blank/.rvm/gems/ruby-2.3.3@myapp /gems/activerecord-4.2.5/lib/active_record/transactions.rb:291:在保存!'从 /Users/blank/dev/gitserver/myapp/myappweb/app/models/user.rb:74:在create_from_signup!'/Users/blank/dev/gitserver/myapp/myappweb/app/services/within_new_transaction:在块中创建'从 /Users/blank/.rvm/gems/account_service.rb:11 /gems/activerecord-4.2.5/lib/active_record/connection_adapters/abstract/database_statements.rb:213:在块中事务'从 /Users/blank/.rvm/gems/seeds.rb:172 /gems/activerecord-4.2.5/lib/active_record/connection_adapters/abstract/transaction.rb:184:在account_service.rb:16'从 /Users/blank/.rvm/gems/ruby-2.3.3@myapp /gems/activerecord-4.2.5/lib/active_record/connection_adapters/abstract/database_statements.rb:213:在事务'从 /Users/blank/.rvm/gems/ruby-2.3.3@myapp /gems/activerecord-4.2.5/lib/active_record/transactions.rb:220:在事务'从 /Users/blank/dev/gitserver/myapp/myappweb/app/services/ruby-2.3.3@myapp:在创建'从 /Users/blank/dev/gitserver/myapp/myappweb/db/ruby-2.3.3@myapp:在

为什么会这样?如果我删除该自定义验证,它运行良好。

我的模型是:

class User < ActiveRecord::Base
    has_secure_password 

  belongs_to :account

    validates :email, uniqueness: { scope: :account_id }
    validates_presence_of :email
    validates_presence_of :password, :password_confirmation, on: :create

    validates_length_of :password, :minimum => 8, :maximum => 32, :allow_blank => false
    #validate :password_complexity 


    def password_complexity
        if !password.blank?
            errors.add(:password, "must contain a upper case character") unless password.match(/[A-Z]/)
        end
    end
end

共有1个答案

潘佐
2023-03-14

改变

errors.add(:password, "must contain a upper case character") if password.match(/[A-Z]/)

errors.add(:password, "must contain a upper case character") unless password.match(/[A-Z]/)
 类似资料:
  • 问题内容: 我有一个带有开始和结束日期范围的Django模型。我想强制执行验证,以便没有两个记录具有重叠的日期范围。最简单的实现方式是什么,这样我就不必重复编写逻辑了? 例如,我不想在Form 和 a 以及 admin表单中重新实现此逻辑, 并且 模型被重写。 据我所知,Django在全球范围内强制执行这些类型的条件并不容易。 Googling并不是很有帮助,因为“模型验证”通常是指验证特定的模型

  • 我正在使用GraphStream库。目前,当我运行我的程序时,它会为我的图形打开新窗口并为我的图形打开单独的窗口。我尝试创建一个并将添加到中,之后我尝试将图形添加到我的中,但它说图形对象不是组件。 这是我的代码: 此程序为和图形打开单独的窗口。我想将我的图形显示在我的或。你知道怎么做吗?我看过这个链接,但它不能很好地解释我。

  • 问题内容: 我有一个带有输入字段和通过添加属性等进行验证设置的表单。但是对于某些领域,我需要做一些额外的验证。我将如何“利用” 控制的验证? 自定义验证可能类似于“如果填写了这3个字段,则此字段是必需的,并且需要以特定方式进行格式化”。 有一个方法,但是看起来不像公共API,所以我宁愿不使用它。创建自定义指令并使用它看起来像另一个选项,但是基本上需要我为每个自定义验证规则创建一个指令,而这是我所不

  • 我们目前正在与社交名媛Laravel的谷歌登录应用程序。我们有一个获得许可号ex的Auth用户。264.我们做了一个函数,它返回一个包含所有二进制数的数组,这个权限号被取消了。 由于每次加载页面时调用此函数可能会有点繁重,因此我们考虑在创建Auth::user()时添加此函数一次。我们曾考虑在模型中添加一个自定义构造函数,但我们无法使其工作。 但是我们不能让它工作,在调用这个函数时没有值。 太长,

  • 它找不到我添加到库中的费率栏库。 下面是我如何将我的库添加到应用程序中的 根级文件 依赖关系{...实现“xxx.xxx.xxxx:xxxx:1.0.6”...}

  • 总结 如何在Django MongoEngine中使用自定义用户模型和自定义身份验证后端(允许电子邮件/密码身份验证)?(这是否需要自定义后端?…即,在使用MongoEngine进行身份验证时使用电子邮件作为用户名。) 是否有直接(完整)的文档在Django中进行身份验证时,将Mongo用作主数据存储时使用自定义用户对象的示例?(博士后有如此清晰和全面的文档…) 细节 MongoEngine似乎只