2015-05-12 2 views
0

Каким будет правильный синтаксис для тестирования с рельсами 4 после амортизации validates_uniqueness_of?Уникальность испытания модели rspec

в моей модели ...

# prior to Rails 4 
validates_uniqueness_of :number 

# Rails 4 
validates :number, uniqueness: true 

в тестовом файле ...

# prior to rails 4 
it {should validate_uniqueness_of(:number)} 

этот тест не пройден ...

# this fails but with the correct error message expected 
it "validates the uniqueness of number" do 
    Fabricate(:wo, number: "494949") 
    expect{Fabricate.build(:wo, number: "494949")}.to raise_error(ActiveRecord::RecordInvalid, "Validation failed: Number has already been taken") 
end 

Что я делаю неправильно?

+0

Мне нравится драгоценный камень 'musta-matchers'. Как только вы установите, есть один тест линейки, который вы можете включить для большей части вашей модели, включая уникальность (validate_uniqueness_of). –

+0

Я подумал, что 'validates_uniqueness_of'is теперь обесценивается в рельсах 4 – Beengie

+0

Истинный (я думаю) для модели, как вы говорите в своем посте, но драгоценный камень дает вам хороший помощник. Я запускаю 4.2 и в своем тесте у меня есть: 'it {должен validate_uniqueness_of (: email)}'. –

ответ

1

Вызов build фактически не будет выполнять проверки. Попробуйте Fabricate(:wo, number: "494949").