ruby-on-rails - Ensure_inclusion_of 在应该失败的时候仍然通过?

标签 ruby-on-rails ruby-on-rails-3 rspec-rails shoulda

我正在使用ShouldaRspec用于测试。

当我在测试规范中尝试此操作时,当我尚未在模型中进行验证时,它会继续通过:

it { should ensure_inclusion_of(:private).in_array(%w[true false]) }

该属性是一个 bool 值,要么为真,要么为假:

validates_inclusion_of :private, :in => [true, false]

我该如何正确地写这个?

最佳答案

TrueFalse 不是字符串,因此不要使用 %w。

it { should ensure_inclusion_of(:private).in_array([true, false]) }

更新 - 2014 年 4 月 10 日

此验证在 Shoulda 的当前版本中不起作用,并且根据 this recent commit ,它不会被修复,而是会引发异常。

分配给 bool 字段的任何值都将被转换为 true(由 true, 1, '1', 't', 'T', 'true', 'TRUE' 设置) )或 false(由其他任何设置)我测试 bool 字段的首选方法如下:

  • 对于数据库中允许空值的 bool 值 - 不需要测试,任何可能的值都有效

  • 对于数据库中不允许存在空值的 bool 值 - 使用 it { Should_not allowed_value(nil).for(:field) ,它将在 validates :field 时通过, inclusion: { in: [true,false] } 在模型上设置

关于ruby-on-rails - Ensure_inclusion_of 在应该失败的时候仍然通过?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12357165/

相关文章:

ruby-on-rails - 规范文件加载顺序问题 : in `find_and_eval_shared' : Could not find shared examples

ruby-on-rails - "RuntimeError unknown class:"访问 "joins"操作的结果时

mysql - 正确使用存储过程动态创建图表吗?

ruby-on-rails - rake 数据库 :migrate - how do I undo all migrations and redo them

ruby-on-rails - 如何在 Ruby on Rails 的 Ubuntu 服务器上以生产模式重新启动 Phusion Passenger + Apache?

ruby-on-rails - 使用 capistrano 部署 "zero downtime"后, unicorn worker 超时

ruby-on-rails - 如何使用expect语法编写should_not be_valid

rspec - rspec 中的钩子(Hook)之前与 :all? 之前相同

ruby-on-rails - 如何在Ruby on Rails中使用Base64编码?

ruby-on-rails - Rails Action 缓存 RSpec 测试失败