Разрешить пустое включение должно validate_uniqueness_of - PullRequest
1 голос
/ 16 июня 2010

Используя musta, любые идеи, как оставить пустым при проведении этого теста:

should validate_uniqueness_of(:email)

Спасибо.

Ответы [ 3 ]

2 голосов
/ 09 ноября 2011

Я понял это !! Значение validate_uniqueness_of зависит от значения атрибута, который вы в настоящее время тестируете, для первой записи в базе данных. Таким образом, если первая запись в базе данных окажется пустой или нулевой для этого атрибута, ваш тест всегда выдаст ошибку, подобную этой: Ожидаемые ошибки для включения «уже были приняты», если для customer_number задано значение nil, ошибок нет ».

Итак, как нам это исправить? Убедитесь, что вы удалили все существующие записи и что первая запись содержит заполненное значение для атрибута.

Модель:

validates_uniqueness_of :customer_number, :scope => :user_id, :case_sensitive => false, :allow_blank => true, :allow_nil => true

Спецификация модели:

describe 'Validation' do

  it { should allow_value('').for(:customer_number) }

  describe 'When a user exists with the same customer_number and user' do
    before(:each) do 
      Customer.destroy_all
      # Saving a single customer to validate uniqueness.
      @existing = Factory(:customer, :customer_number => 'test') # If you leave customer_number blank here the matcher will check if it can save a new record with a blank customer_number which is possible since we allow blanks. So make sure your first record has a filled in value!!
    end

    subject do
      Factory.build(:customer)
    end

    it { should validate_uniqueness_of(:customer_number).case_insensitive.scoped_to(:user_id) }
  end
end

Надеюсь, это решило проблемы некоторых людей:)

2 голосов
/ 17 июня 2010
should allow_value(" ").for(:email)
should allow_value(nil).for(:email)
0 голосов
/ 19 августа 2010

возможно

should validate_uniqueness_of(:email, :allow_blank => true)
...