Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在RSpec中测试空白/空字符串以进行包含验证?_Ruby On Rails_Ruby On Rails 4_Rspec Rails_Rspec3 - Fatal编程技术网

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.完整消息
,我得到
[“状态代码未包含在列表中”