2012-10-18 3 views
11

Scheint einfach, aber war nicht in der Lage, herauszufinden, wie man das zum Laufen bringt.Wie funktioniert FactoryGirl mit einem Modell, das bei der Initialisierungsmethode einen Hashwert verwendet?

In model.rb:

def Model 
    attr_accessor :width, 
       :height 

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

In der Werks Datei models.rb:

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

die Attribute in der Factory-Methode Einstellung wirft einen Fehler wrong number of arguments (0 for 1)

in Ruby 1.9.3 Arbeiten ohne Schienen mit Factory.build. FabrikGirl 4.1.

EDIT: Mehr Info:

Mit RSpec: let(:model) { FactoryGirl.build :model }

+0

Dies sieht wie eine Standard-FactoryGirl-Definition aus. Wie nennt man 'Factory.build'? Könnten Sie den vollständigen Inhalt Ihrer Factory-Definition einschließlich aller 'after_build'- oder' after_create'-Hooks posten? –

+0

OK, fertig. Informationen hinzugefügt. –

Antwort

29

Dies sollte mit Ihrer Klasse arbeiten:

FactoryGirl.define do 

    factory :model do 
    skip_create 

    width 5 
    height 9 

    initialize_with { new(attributes) } 
    end 
end 

- skip_create umgeht die Standard save! Aktion normalerweise auf neue Objekte genannt.

- Die attributes Methode generiert einen Hashwert, den Sie an new mit initialize_with übergeben können.

+0

Dies übergibt einen leeren Hash. 'initialize_with {{height: 5, width: 6}}' übergibt den entsprechenden Hash, aber die Factory gibt den Hash anstelle des Modellobjekts zurück. –

+0

Sie haben Recht; Es sollte keinen Ignorierblock geben. Entfernen Sie es jetzt. –

+0

Es funktioniert. Vielen Dank! –

Verwandte Themen