【问题标题】:shoulda validate_inclusion_of not working应该 validate_inclusion_of 不工作
【发布时间】:2015-05-08 18:30:08
【问题描述】:

最近将代码库与 gems 一起升级到 rails4,现在我们遇到了这个错误。

Failure/Error: it { is_expected.to ensure_inclusion_of(:usage).in_array(['Index', 'Slide', 'Body']).with_message("%{value} is not a valid usage") }
   ["Index", "Slide", "Body"] doesn't match array in validation

这里是相关的型号代码

USAGES = ['Index', 'Slide', 'Body']
validates_inclusion_of :usage, :in => USAGES, :message => "%{value} is not a valid usage"

我有什么遗漏吗?我不明白为什么这会失败。

【问题讨论】:

    标签: ruby-on-rails-4 rspec shoulda rspec3


    【解决方案1】:

    validate_inclusion_of 在内部使用 allow_value。诚然,我们应该给你一个更好的错误信息来说明这里发生了什么,但你应该能够编写以下测试来弄清楚发生了什么:

    it { should allow_value("Index").for(:usage) }
    it { should allow_value("Slide").for(:usage) }
    it { should allow_value("Body").for(:usage) }
    
    it do
      should_not allow_value("something else").
        for(:usage).
        with_message("%{value} is not a valid usage")
    end
    

    我的猜测是 shoulda-matchers 不会在您的失败消息中自动插入 %{value}。如果这是真的,那么我要做的(在filing an issue 之后)将消息提取到 i18n 密钥,然后将密钥的名称传递给 with_message

    【讨论】:

      【解决方案2】:

      为我工作-

      expect { should validate_inclusion_of(:usage).in?(['a', 'b']) }
      

      【讨论】:

        【解决方案3】:

        应该试试这个 -

        validates :usage, inclusion: { :in => %w( Index Slide Body ), :message => "%{value} is not a valid usage" }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-03-01
          • 1970-01-01
          • 2022-11-14
          • 2015-03-31
          • 1970-01-01
          • 2021-06-09
          • 1970-01-01
          相关资源
          最近更新 更多