【问题标题】:Shoulda cannot properly validate case-sensitive unique应该无法正确验证区分大小写的唯一性
【发布时间】:2017-02-18 02:55:23
【问题描述】:

使用shouldaFactoryGirl 来测试模型验证。

工厂

FactoryGirl.define do
  factory :tag do
    value { Faker::Lorem.word }

    user
  end
end

标签模型

class Tag < ApplicationRecord
  validates :value,
            presence: true,
            uniqueness: { case_sensitive: false }

  belongs_to :user
  has_and_belongs_to_many :cards
end

标签规范

RSpec.describe Tag, type: :model do
  describe 'validations' do
    it { should validate_presence_of(:value) }
    it { should validate_uniqueness_of(:value) }
  end

  describe 'associations' do
    it { should belong_to(:user) }
    # it { should have_and_belong_to_many(:cards) }
  end
end

运行测试时出现以下错误,

Failures:

  1) Tag validations should validate that :value is case-sensitively unique
     Failure/Error: it { should validate_uniqueness_of(:value) }

       Tag did not properly validate that :value is case-sensitively unique.
         After taking the given Tag, setting its :value to ‹"an arbitrary
         value"›, and saving it as the existing record, then making a new Tag
         and setting its :value to a different value, ‹"AN ARBITRARY VALUE"›,
         the matcher expected the new Tag to be valid, but it was invalid
         instead, producing these validation errors:

         * value: ["has already been taken"]
         * user: ["must exist"]
     # ./spec/models/tag_spec.rb:6:in `block (3 levels) in <top (required)>'
     # -e:1:in `<main>'

【问题讨论】:

    标签: ruby-on-rails shoulda


    【解决方案1】:

    测试case_insensitive的正确方法是使用下面的匹配器,

    it { should validate_uniqueness_of(:value).case_insensitive }
    

    【讨论】:

      【解决方案2】:

      你也可以写ignoring_case_sensitivity:

      it { should validate_uniqueness_of(:value).ignoring_case_sensitivity }
      

      【讨论】:

        猜你喜欢
        • 2012-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-04
        • 1970-01-01
        • 2012-01-31
        • 1970-01-01
        • 2012-12-09
        相关资源
        最近更新 更多