2012-10-18 4 views
11

Wydaje się proste, ale nie udało się wymyślić, jak to uruchomić.Jak używać FactoryGirl z modelem, który pobiera skrót w metodzie inicjowania?

W model.rb:

def Model 
    attr_accessor :width, 
       :height 

    def initialize params 
    @width = params[:width] 
    @height = params[:height] 
    ... 

W pliku fabrycznego models.rb:

FactoryGirl.define do 
    factory :model do 
    height 5 
    width 7 
    end 
end 

Ustawianie atrybutów w metodzie fabrycznego zgłasza błąd wrong number of arguments (0 for 1)

pracujących w Ruby 1.9.3 bez Szyny, używając Factory.build. FactoryGirl 4.1.

EDIT: Więcej informacji:

Korzystanie rspec: let(:model) { FactoryGirl.build :model }

+0

Wygląda to jak standardowa definicja FactoryGirl. Jak się nazywasz 'Factory.build'? Czy mógłbyś opublikować pełną zawartość definicji twojej fabryki, w tym haki 'after_build' lub' after_create'? –

+0

OK, gotowe. Dodano informacje. –

Odpowiedz

29

ten powinien pracować z klasą:

FactoryGirl.define do 

    factory :model do 
    skip_create 

    width 5 
    height 9 

    initialize_with { new(attributes) } 
    end 
end 

- skip_create omija działanie domyślne save! normalnie nazwie na nowych obiektów.

- Metoda attributes generuje hash, który można przekazać do new przy użyciu initialize_with.

+0

To przechodzi w pustym haszu. 'initialize_with {{height: 5, width: 6}}' przechodzi w odpowiednim hash, ale fabryka zwraca hasz zamiast obiektu modelu. –

+0

Masz rację; nie powinno być bloku ignorującego. Usunięcie go teraz. –

+0

To działa. Dziękuję Ci! –