未定义的方法`in_array&#39; for#<mongoid :: matchers :: validations :: validateinclusionofmatcher>

时间:2015-07-08 09:22:17

标签: ruby-on-rails validation mongoid shoulda

我一直在寻找知道如何测试validates_inclusion_of模型验证,现在我想测试一下。但是有一个错误,我不知道如何解决。这种方法是否已被弃用?还有其他选择吗?

我的模特:

class SomeName
  include Mongoid::xxx (some mongoid includes)

  field :time_zone
  validates :time_zone, inclusion: { in: ActiveSupport::TimeZone.zones_map.keys }
end

我的测试:

 describe SomeName do
   subject { build(:some_name) }

   it { is_expected.to validate_inclusion_of(:time_zone).in_array(ActiveSupport::TimeZone.zones_map.keys) }
 end

我的应用程序版本:

shoulda-matchers (2.8.0)

我的错误:

Failure/Error: it { is_expected.to validate_inclusion_of(:time_zone).in_array(ActiveSupport::TimeZone.zones_map.keys) }
 NoMethodError:
   undefined method `in_array' for #<Mongoid::Matchers::Validations::ValidateInclusionOfMatcher:0x007fb2be592590>

1 个答案:

答案 0 :(得分:2)

根据错误消息判断,您似乎还安装了mongoid-rspec gem,它也定义了validates_inclusion_of方法。在您的情况下,它包含在shoulda-matchers之后,因此它会覆盖该方法。

这里有两个选项 - 要么改变这两个模块的包含顺序(然后会给你一个匹配器匹配器),要么采用你的代码来实现mongoid-rspec:

it { is_expected.to validate_inclusion_of(:time_zone).to_allow(ActiveSupport::TimeZone.zones_map.keys) }