ruby-on-rails – Rspec,shoulda,validate_uniqueness_of具有范围和错误的错误消息

我有以下Rspec测试:
describe Productlimit do

  before(:each) do 
    @productlimit = Factory.create(:productlimit,:user => Factory.create(:user))
  end

  subject { @productlimit }

  ...

  it { should validate_uniqueness_of(:price_cents).scoped_to(:direction_down,:currency,:market_id,:user_id) }
  ...
end

但我得到以下混乱的错误

1) Productlimit 
     Failure/Error: it { should validate_uniqueness_of(:price_cents).scoped_to(:direction_down,:user_id) }
       Expected errors to include "has already been taken" when price_cents is set to 9530,got errors: ["direction_down has already been taken (false)"]

你可以帮我吗?我不明白为什么这不工作,因为错误信息似乎是正确的?

编辑:

在其他情况下也会发生这种情况:

# product_spec.rb
...
it { should validate_numericality_of(:price).with_message("price_cents must be greater than 0 (0)") }  

# rake spec:models
Failure/Error: it { should validate_numericality_of(:price).with_message("price_cents must be greater than 0 (0)") }
   Expected errors to include "price_cents must be greater than 0 (0)" when price is set to "abcd",got errors: ["price_cents must be greater than 0 (0)"]

解决方法

要检查validate_uniqueness_of(:field),但是为此,您应该在数据库中租用一个记录来检查uniquness约束.
这是….
before do
  @country = FactoryGirl.create(:country,:id =>"a0000007-0000-0000-0000-000000000009",:currency_id => "a0000006-0000-0000-0000-000000000004",:merchant_id => "a0000001-0000-0000-0000-000000000002",:country_code => 'CAN',:name => 'Canada')
end

验证唯一性

it { should validate_uniqueness_of(:country_code)}

它会努力尝试.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...