首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于#<Mongoid::Matchers::Validations::ValidateInclusionOfMatcher>的未定义方法`in_array‘

用于#<Mongoid::Matchers::Validations::ValidateInclusionOfMatcher>的未定义方法`in_array‘
EN

Stack Overflow用户
提问于 2015-07-08 09:22:17
回答 1查看 386关注 0票数 1

我一直在四处寻找如何测试一个validates_inclusion_of模型验证,现在我想测试它。但是有一个错误我不知道怎么解决。这种方法不可取吗?还有别的选择吗?

我的模特:

代码语言:javascript
复制
class SomeName
  include Mongoid::xxx (some mongoid includes)

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

我的测试:

代码语言:javascript
复制
 describe SomeName do
   subject { build(:some_name) }

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

我的相亲版本:

代码语言:javascript
复制
shoulda-matchers (2.8.0)

我的错误:

代码语言:javascript
复制
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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-08 14:23:36

从错误消息判断,您似乎也安装了mongoid-rspec gem,它也定义了validates_inclusion_of方法。在您的示例中,它包含在shoulda-matchers之后,因此它重写了该方法。

这里有两个选项--要么更改包含这两个模块的顺序(这将给您提供“应匹配器”),要么采用您的代码来实现mongoid:

代码语言:javascript
复制
it { is_expected.to validate_inclusion_of(:time_zone).to_allow(ActiveSupport::TimeZone.zones_map.keys) }
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31288495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档