#<Mongoid::Matchers::Validations::ValidateInclusionOfMatcher> 的未定义方法“in_array”
undefined method `in_array' for #<Mongoid::Matchers::Validations::ValidateInclusionOfMatcher>
我一直在四处寻找以了解如何测试 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 版本:
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>
从错误消息来看,您似乎还安装了 mongoid-rspec
gem 也定义了 validates_inclusion_of
方法。在您的情况下,它包含在 shoulda-matchers
之后,因此它会覆盖该方法。
这里有两个选项 - 要么更改包含这两个模块的顺序(然后将为您提供 shoulda-matcher 匹配器),要么将您的代码采用 mongoid-rspec 实现:
it { is_expected.to validate_inclusion_of(:time_zone).to_allow(ActiveSupport::TimeZone.zones_map.keys) }
我一直在四处寻找以了解如何测试 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 版本:
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>
从错误消息来看,您似乎还安装了 mongoid-rspec
gem 也定义了 validates_inclusion_of
方法。在您的情况下,它包含在 shoulda-matchers
之后,因此它会覆盖该方法。
这里有两个选项 - 要么更改包含这两个模块的顺序(然后将为您提供 shoulda-matcher 匹配器),要么将您的代码采用 mongoid-rspec 实现:
it { is_expected.to validate_inclusion_of(:time_zone).to_allow(ActiveSupport::TimeZone.zones_map.keys) }