Ruby on rails 如何在RSpec中测试空白/空字符串以进行包含验证?
我的验证确保必填字段只能设置为Ruby on rails 如何在RSpec中测试空白/空字符串以进行包含验证?,ruby-on-rails,ruby-on-rails-4,rspec-rails,rspec3,Ruby On Rails,Ruby On Rails 4,Rspec Rails,Rspec3,我的验证确保必填字段只能设置为a或R: 在模型中: validates :status_code, inclusion: { in: %w(A R) } 在RSpec中,我有以下规范: it { expect(@car).to allow_value("A", "R").for(:status_code) } it { expect(@car).to_not allow_value(nil, "").for(:status_code) } 第一个RSpec通过,但第二个RSpec出现错误:
a
或R
:
在模型中:
validates :status_code, inclusion: { in: %w(A R) }
在RSpec中,我有以下规范:
it { expect(@car).to allow_value("A", "R").for(:status_code) }
it { expect(@car).to_not allow_value(nil, "").for(:status_code) }
第一个RSpec通过,但第二个RSpec出现错误:
Failure/Error: it { expect(@car).to_not allow_value(nil, "").for(:status_code) }
Expected errors when status_code is set to "", got no errors
我错过了什么?我使用的是RSpec 3.1。内置验证器接受布尔选项
:allow_blank
和:allow_nil
,以控制当值为这两个值之一时它的行为。试试这个:
validates :status_code, inclusion: { in: %w(A R), allow_blank: false, allow_nil: false }
添加一个状态验证器来处理nil和空字符串也可能有用:
validates :status_code, inclusion: { in: %w(A R) }, presence: true
感谢您的反馈!如果在内置验证器中包含布尔选项,那么我的模型验证器是否应该包含
allow\u blank:false,allow\u nil:false
以实现“一致性”(尽管包含这些选项是多余的);或者,如果我确实包含allow\u blank:false,allow\u nil:false
,验证基本上是良性的,因为包含
。好像有点不对劲。我期待您的回复。更新了另一个可能的解决方案。谢谢Jimmy。两者都不能验证工作。我认为这是一个Rspec错误。如果我rails c
那么c=Car.首先然后c.status\u code='
然后c.valid?
然后c.errors.完整消息
,我得到[“状态代码未包含在列表中”