2013-05-24 11 views
11

mam (uproszczone) Zakłady zdefiniowane następująco:Dziewczyna z fabryki wyjątkowość walidacja zawiedzie stowarzyszonych fabryk

factory :league do 
    acronym 'NBA' 
end 

factory :division do 
    league 
end 

Podziały należą do lig. Kiedy zdefiniowałem tę fabrykę, zakładałem, że 1 liga zostanie stworzona, a ta liga będzie wielokrotnie używana ponownie, by dać oddziałom prawdziwe wyniki lidera.

Zamiast tego dostaję błędy w drugim wywołaniu FactoryGirl.create(:division), ponieważ League acronym ma być unikalna.

class League < ActiveRecord::Base 
    validates :acronym, uniqueness: true 
end 

prowadzi do następnego przerwy w teście

ActiveRecord :: RecordInvalid: Validation nie powiodło się: Nazwa skrócona została już podjęta

Jak mogę obejść ten problem, najlepiej bez tworzenia hierarchia w konfiguracji do testu?

jeśli tam coś lepszego niż factory_girl dla co usiłuję osiągnąć, proszę nie sugerować się

Odpowiedz

4

W zależności od tego, gdzie dzwonisz FactoryGirl.create rekordy dostanie tworzone dla każdej specyfikacji masz. To, czego chcesz, to database_cleaner, po skonfigurowaniu wyczyści twoją bazę danych po każdym sprawdzeniu, czy błędy sprawdzania poprawności przestały być problemem.

EDIT

Ups, ja misread swoje pytanie. Co będziemy chcieli zrobić to albo użyć faker gem do generowania losowych ciągów dla każdego akronimem lub użyj factory_girl sekwencję jak to

FactoryGirl.define do 
    sequence :acronym do |n| 
    "NBA#{n}" 
    end 

    factory :league do 
    acronym 
    end 
end 

Korzystanie sekwencji rzeczywiście upewnić się, że każda liga posiada unikalny utworzony skrót.

Powiązane problemy