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

Ruby on rails 当我将此自定义验证添加到我的用户模型时,空rspec失败,ruby-on-rails,rspec,Ruby On Rails,Rspec,我有一个用户模型,如果我添加此自定义验证,我的空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_hel

我有一个用户模型,如果我添加此自定义验证,我的空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 spec/models/user_spec.rb
得到:

/Users/blank/.rvm/gems/ruby-2.3。3@myapp/gems/activerecord-4.2.5/lib/active\u record/validations.rb:79:in
raise\u记录\u无效”:验证失败:密码必须包含
大写字符,密码必须包含小写字符
(ActiveRecord::RecordInvalid)来自
/Users/blank/.rvm/gems/ruby-2.3。3@myapp/gems/activerecord-4.2.5/lib/active\u record/validations.rb:43:in
save!'从…起 /Users/blank/.rvm/gems/ruby-2.3。3@myapp/gems/activerecord-4.2.5/lib/active\u record/attribute\u methods/dirty.rb:29:in
save!'从…起
/Users/blank/.rvm/gems/ruby-2.3。3@myapp/gems/activerecord-4.2.5/lib/active\u record/transactions.rb:291:in
在保存中阻止!'从…起 /Users/blank/.rvm/gems/ruby-2.3。3@myapp/gems/activerecord-4.2.5/lib/active_record/transactions.rb:351:in
block in,其中\u事务\u从返回\u状态
/Users/blank/.rvm/gems/ruby-2.3。3@myapp/gems/activerecord-4.2.5/lib/active\u record/connection\u adapters/abstract/database\u语句。rb:211:in
transaction'来自 /Users/blank/.rvm/gems/ruby-2.3。3@myapp/gems/activerecord-4.2.5/lib/active\u record/transactions.rb:220:in
transaction'来自
/Users/blank/.rvm/gems/ruby-2.3。3@myapp/gems/activerecord-4.2.5/lib/active\u record/transactions.rb:348:in
当交易从返回状态时 /Users/blank/.rvm/gems/ruby-2.3。3@myapp/gems/activerecord-4.2.5/lib/active\u record/transactions.rb:291:in
save!'从…起
/Users/blank/dev/gitserver/myapp/myappweb/app/models/user.rb:74:in
create\u from\u signup!'从…起 /Users/blank/dev/gitserver/myapp/myappweb/app/services/account\u service.rb:16:in
create中的block'from
/Users/blank/.rvm/gems/ruby-2.3。3@myapp/gems/activerecord-4.2.5/lib/active\u record/connection\u adapters/abstract/database\u语句。rb:213:in
阻止来自的“事务” /Users/blank/.rvm/gems/ruby-2.3。3@myapp/gems/activerecord-4.2.5/lib/active\u record/connection\u adapters/abstract/transaction.rb:184:in
在来自的“新交易”中
/Users/blank/.rvm/gems/ruby-2.3。3@myapp/gems/activerecord-4.2.5/lib/active\u record/connection\u adapters/abstract/database\u语句。rb:213:in
transaction'来自 /Users/blank/.rvm/gems/ruby-2.3。3@myapp/gems/activerecord-4.2.5/lib/active\u record/transactions.rb:220:in
transaction'来自
/Users/blank/dev/gitserver/myapp/myappweb/app/services/account\u service.rb:11:in
create“from” /Users/blank/dev/gitserver/myapp/myappweb/db/seeds.rb:172:in
”from
/Users/blank/.rvm/gems/ruby-2.3。3@myapp/gems/activesupport-4.2.5/lib/active\u-support/dependencies.rb:268:in
load'从 /Users/blank/.rvm/gems/ruby-2.3。3@myapp/gems/activesupport-4.2.5/lib/active\u-support/dependencies.rb:268:in
block in load'来自
/Users/blank/.rvm/gems/ruby-2.3。3@myapp/gems/activesupport-4.2.5/lib/active\u-support/dependencies.rb:240:in
从中加载依赖项 /Users/blank/.rvm/gems/ruby-2.3。3@myapp/gems/activesupport-4.2.5/lib/active\u-support/dependencies.rb:268:in
load'来自
/Users/blank/.rvm/gems/ruby-2.3。3@myapp/gems/railties-4.2.5/lib/rails/engine.rb:547:in
从中加载种子 /Users/blank/dev/gitserver/myapp/myappweb/spec/spec\u helper.rb:24:in
from'中的块(2级)
/Users/blank/.rvm/gems/ruby-2.3。3@myapp/gems/rspec-core-3.4.1/lib/rspec/core/example.rb:424:in
instance_exec'from /Users/blank/.rvm/gems/ruby-2.3。3@myapp/gems/rspec-core-3.4.1/lib/rspec/core/example.rb:424:in
instance_exec'来自
/Users/blank/.rvm/gems/ruby-2.3。3@myapp/gems/rspec-core-3.4.1/lib/rspec/core/hooks.rb:357:in
run'from /Users/blank/.rvm/gems/ruby-2.3。3@myapp/gems/rspec-core-3.4.1/lib/rspec/core/configuration.rb:1724:in
run\u中的块与'from'挂钩
/Users/blank/.rvm/gems/ruby-2.3。3@myapp/gems/rspec-core-3.4.1/lib/rspec/core/configuration.rb:1724:in
每个“源” /Users/blank/.rvm/gems/ruby-2.3。3@myapp/gems/rspec-core-3.4.1/lib/rspec/core/configuration.rb:1724:in
使用“from”运行
/Users/blank/.rvm/gems/ruby-2.3。3@myapp/gems/rspec-core-3.4.1/lib/rspec/core/configuration.rb:1679:in
带有来自的\u套件\u挂钩 /Users/blank/.rvm/gems/ruby-2.3。3@myapp/gems/rspec-core-3.4.1/lib/rspec/core/runner.rb:114:in 来自的运行规格中的块 /Users/blank/.rvm/gems/ruby-2.3。3@myapp/gems/rspec-core-3.4.1/lib/rspec/core/reporter.rb:77:in report'来自 /Users/blank/.rvm/gems/ruby-2.3。3@myapp/gems/rspec-core-3.4.1/lib/rspec/core/runner.rb:113:in
run_specs'from
/Users/blank/.rvm/gems/ruby-2.3。3@myapp/gems/rspec-core-3.4.1/lib/rspec/core/runner.rb:89:in
run'from /Users/blank/.rvm/gems/ruby-2.3。3@myapp/gems/rspec-core-3.4.1/lib/rspec/core/runner.rb:73:in
run'从
/Users/blank/.rvm/gems/ruby-2.3。3@myapp/gems/rspec-core-3.4.1/lib/rspec/core/runner.rb:41:in
invoke“from” /Users/blank/.rvm/gems/ruby-2.3。3@myapp/gems/rspec-core-3.4.1/exe/rspec:4:in 来自 /Users/blank/.rvm/gems/ruby-2.3。3@myapp/bin/rspec:22:inload'from /Users/blank/.rvm/gems/ruby-2.3。3@myapp/bin/rspec:22:in
“from”
/Users/blank/.rvm/gems/ruby-2.3。3@myapp/bin/ruby_可执行_挂钩:15:in
eval'来自 /Users/blank/.rvm/gems/ruby-2.3。3@myapp/bin/ruby_可执行_挂钩:15:in `"

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

我的模型是:

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
class用户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]/)