Rspec / shoulda: тестирование, вызывается пользовательский валидатор

У меня есть собственный валидатор (расположенный в app/validators/uri_validator.rb), который используется в:

validates :link, uri: true

Как указать это в характеристиках?

В идеале я хотел бы иметь однострочный вызов, например:

it { should validate_uri_of(:link) }

Как мне это сделать?


person krn    schedule 12.06.2012    source источник


Ответы (2)


Другой вариант — использовать сопоставитель allow_value, хотя он и не идеален, но может работать в некоторых обстоятельствах.

it { should allow_value(value_which_is_valid).for(:link) }
it { should_not allow_value(value_which_is_invalid).for(:link) }
person nmott    schedule 25.06.2012

Используйте девушку-фабрику, чтобы создать объект модели с неверными данными и один с действительными данными, и вызовите сопоставитель be_valid.

#factory girl
build(:model, link: valid_uri).should be_valid
build(:model, link: invalid_uri).should_not be_valid
person DVG    schedule 12.06.2012
comment
Я стараюсь не задевать базу данных во время тестирования, когда это возможно. - person krn; 12.06.2012
comment
Использование девушки-фабрики с build не попадает в базу данных, она создает несохраненную модель. - person nmott; 25.06.2012