【问题标题】:Ensure_inclusion_of keeps passing when it should fail?Ensure_inclusion_of 在应该失败时继续通过?
【发布时间】:2012-09-10 18:07:34
【问题描述】:

我正在使用ShouldaRspec 进行测试。

当我在我的测试规范中尝试这个时,如果我没有在模型中完成验证,它会一直通过:

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

属性是一个布尔值,为真或假:

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

我该如何正确地写这个?

【问题讨论】:

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


    【解决方案1】:

    TrueFalse 不是字符串,所以不要使用 %w。

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

    更新 - 2014 年 4 月 10 日

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

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

    • 对于允许在数据库中使用空值的布尔值 - 不需要测试,任何可能的值都是有效的

    • 对于不允许在数据库中使用空值的布尔值 - 使用 it { should_not allow_value(nil).for(:field),当在模型上设置 validates :field, inclusion: { in: [true,false] } 时会通过

    【讨论】:

      猜你喜欢
      • 2010-09-07
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多