【问题标题】:How to use ensure_inclusion_of for an arbitrary list如何将 ensure_inclusion_of 用于任意列表
【发布时间】:2011-04-04 04:00:37
【问题描述】:
在我的 rails 项目中,我有一个带有 foo 属性的模型。我有一个验证,可确保 foo 的任何值都在数组中。这使用带有 :in 选项的验证。
我想使用 rspec/should 对此进行测试。我认为 ensure_inclusion_of 应该测试这个验证,但它只适用于范围而不是数组。我怎样才能使它与数组一起工作或编写我自己的匹配器来做到这一点?
【问题讨论】:
标签:
ruby-on-rails
ruby
testing
rspec
shoulda
【解决方案1】:
ensure_inclusion_of 用于检查模块是否包含在当前类中。
如果您想测试 validates_inclusion_of,您可以自己为此编写 RSpecs,或者安装 Shoulda 并使用它的宏。
我在这里验证用户模型上的gender 字段。
describe User do
it { should validate_presence_of(:gender) }
it { should allow_value("male").for(:gender) }
it { should allow_value("female").for(:gender) }
it { should_not allow_value("other").for(:gender) }
end
【解决方案2】:
你现在可以这样写:
it { should ensure_inclusion_of(:gender).in_array(%w(male female)) }