【问题标题】:Rspec validate uniqueness with scopeRspec 使用范围验证唯一性
【发布时间】:2013-05-01 20:28:44
【问题描述】:

我的 Line 模型中有这个

validates :home_team, :uniqueness => { :scope => [:visiting_team, :event_datetime],
:message => "** DOUBLE EVENT **" }  

我的规范中有这个

describe Line do
  it { should validate_uniqueness_of(:home_team).scoped_to(:visiting_team, :event_datetime) }  

我收到此错误...

失败:

1) Line 
 Failure/Error: 

it { should validate_uniqueness_of(:home_team).scoped_to(:visiting_team, :event_datetime) }
   Did not expect errors to include "has already been taken" when home_team is set to "arbitrary_string", got error: 
# ./spec/models/line_spec.rb:7:in `block (2 levels) in <top (required)>'

任何想法为什么会失败?

【问题讨论】:

    标签: ruby-on-rails rspec rspec-rails


    【解决方案1】:

    我认为你需要这样做才能通过

    it { should validate_uniqueness_of(:home_team).scoped_to(:visiting_team, :event_datetime).with_message("** DOUBLE EVENT **") }
    

    唯一性的默认错误信息是“已经被占用”。

    【讨论】:

    • 嗨 Roy :) 现在我明白了.... 我想我将不得不尝试新的方法。 1)线路故障/错误:它{应该 validate_uniqueness_of(:home_team).scoped_to(:visiting_team, :event_datetime).with_message("** DOUBLE EVENT **") } NoMethodError: undefined method change' for 1:Fixnum # ./spec/models/line_spec.rb:7:in block (2 levels) in '
    • 这对我也有用,但是如果你想验证唯一性怎么办unless: -&gt; { home_team.nil? },你会如何测试呢?
    【解决方案2】:

    如果你关注rubocops ImplicitExpect,你可能会使用这样的东西:

    it { is_expected.to validate(%i[home_team], uniqueness: { scope: [:visiting_team, :event_datetime] }) }
    

    it { is_expected.to validate_uniqueness_of(:home_team).scoped_to(:visiting_team, :event_datetime) }
    

    (请注意,我没有包含自定义错误消息,因为原始问题已经很老了,与原始问题提问者相比,我更倾向于通过此答案帮助来自 google 的访问者)

    【讨论】:

      【解决方案3】:

      使用新的“期望”行话

      let(:line) { build(:line) } # if using factory bot, or you could use fixtures
      it {expect(line).to validate_uniqueness_of(:home_team).scoped_to(:visiting_team, :event_datetime)  }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-24
        • 1970-01-01
        相关资源
        最近更新 更多