2013-04-12 4 views
0

Я использую minitest на Ruby on Rails. Ниже моя модель.тест уникальности на minitest

require 'mongoid' 
class Person 
    include Mongoid::Document 
    index({ pin: 1 }, { unique: true, name: "pin_index" }) 
    field :first_name 
    field :last_name 
    field :pin 

    validates :pin,    presence: true, uniqueness: true 
    validates :first_name,   presence: true 
    validates :last_name,   presence: true 
end 

Я пытаюсь написать модель test.I хочет написать тест, который контролирует ли штырьковое поле является уникальным или нет. Как я могу это сделать? Есть идеи?

Я пытаюсь написать тест, как показано ниже:

it 'must not be valid' do 
    person_copy = person.dup 
    person.save 
    person_copy.save 
end 
+0

использовать 'person_copy.save!', чтобы поднять ошибку, когда уникальность ложна. С RSpec вы можете использовать некоторые приятные помощники, такие как 'expect {person_copy.save! } .to raise_error' – 23tux

ответ

0

Вы можете написать тест, как это:

it 'must have unique pin' do 
    person_copy = person.dup 
    proc { person_copy.save! }.must_raise(Mongoid::Errors::Validations) 
    person_copy.errors.must_include(:pin) 
end 
0

Вы можете использовать assert_includes и assert_same для проверки ошибки является правильным (о уникальности):

it 'must not be valid' do 
    person_copy = person.dup 
    person.save 
    person_copy.save 
    assert_includes person.errors, :pin 
    assert_same person.errors[:pin], "pin is not unique (replace with actual error message)" 
end 
0

Учитывая, что у вас уже установлен комплект, вы можете просто выполните это:

test 'pin must be unique' do 
    new_person = Person.new(@person.attributes) 
    refute new_person.valid? 
end 
Смежные вопросы