Отказ от ответственности: название и атрибуты модели изменены из-за проблем с безопасностью!FactoryGirl создает экземпляры с дефектными атрибутами
class Human < ActiveRecord::Base
...
attr_accessible :ssn
validates :ssn, uniqueness: { scope: ... }
validate :ssn_validator
def ssn_validator
#some regexp for checking
...
end
end
И FactoryGirl фабрика:
FactoryGirl.define do
factory :human do
ssn '123456789'
end
end
И в моем тесте я испытываю мое ssn_validator, то есть создать несколько экземпляров человека с неправильными значениями Ssn.
class SisIdentifiableTest < ActiveSupport::TestCase
context 'human ssn' do
should 'be valid' do
assert FactoryGirl.build(:human).valid?
end
should 'be invalid if containing a & symbol' do
assert !FactoryGirl.build(:human, ssn:'12345678&').valid?
end
should 'be invalid if sorter than 9 symbols' do
assert !FactoryGirl.build(:human, ssn:'12345678').valid?
end
end
end
Результаты испытаний:
HumanTest
human ssn be valid #pass
human ssn be invalid if containing a & symbol #fail
human ssn be invalid if sorter than 9 symbols #fail
Во-первых, я думал, что мой ssn_validator как-то неисправно. Но это было не так.
Все человеческие экземпляры были действительны, потому что как-то ssn в действии? вызов был кеширован.
Я имею в виду, что это действительно? Метод испытания человеческого экземпляра против по умолчанию «123456789» действительное значение (предоставляется: человека завода), а не против предполагаемой ССН: «12345678» или ПЛА: «12345678 &»
В образце:
human = FactoryGirl.build(:human, ssn:'there be dragons')
human.ssn #'there be dragons'
human.ssn_validator #false - because the sting is not valid
human.valid? #true
Мой вопрос: Как проверить валидацию с помощью FactoryGirl? Есть ли другой метод, например, действительный? работая не против кешированных атрибутов? Или я создаю проверенные экземпляры с неправильным способом?
Ваш образец проверяет значение, отличное от ваших тестов. Можете ли вы опубликовать тело своего валидатора SSN? Кроме того, действительно ли вам нужно изменить имена и атрибуты вашей модели? Это просто добавляет еще один слой, где вещи могут быть неверно переведены. –