2013-08-01 1 views
1

Прослушивание гигантских роботов, разбивающихся на подкасты других гигантских роботов, я слышал, что вы хотите, чтобы фабрики FactoryGirl были минимальными, предоставляя только те атрибуты, которые делают объект действительным в базе данных. При этом в разговоре также говорилось, что черты - действительно хороший способ определить конкретное поведение, основанное на атрибуте, который может измениться в будущем.Неплохо ли писать неправильные фабрики/черты FactoryGirl?

Мне интересно, есть ли хорошая идея иметь определенные черты, которые целенаправленно отказывают в проверке, чтобы очистить спецификационный код. Вот пример:

factory :winner do 
    user_extension "7036" 
    contest_rank 1 
    contest 

    trait :paid do 
    paid true 
    end 

    trait :unpaid do 
    paid false 
    end 

    trait :missing_user_extension do 
    user_extension nil 
    end 

    trait :empty_user_extension do 
    user_extension "" 
    end 

end 

позволит мне позвонить build_stubbed(:winner, :missing_user_extension) в моей спецификации в тестах я намерен терпеть неудачу валидаций. Я полагаю, что я мог бы продолжить эту явную неудачу, вложив эти плохие фабрики под другой завод под названием :invalid_winner, но я не уверен, что это необходимо. Меня больше всего интересует мнение других людей по этой концепции.

ответ

3

Нет, это не очень хорошая идея, это не поможет понять, через какое-то время ваши спецификации понятны, а позже, когда ваш код развивается, эта фабрика, которая сегодня не работает, может не сработать, и вам будет трудно просмотреть все ваши спецификации ,

Лучше всего написать свой тест на одну четко идентифицированную вещь. Если вы хотите проверить, что сохранение завершилось с отсутствием обязательного параметра, просто напишите его на своем обычном заводе и добавьте параметры для перезаписывания значений с завода:

it 'should fail' do 
    create :winner, user_extension: nil 
    ... 
end