2012-10-18 11 views
11

Sembra semplice, ma non sono stato in grado di capire come farlo funzionare.Come utilizzare FactoryGirl con un modello che accetta un hash nel metodo di inizializzazione?

In model.rb:

def Model 
    attr_accessor :width, 
       :height 

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

Nel file della famiglia models.rb:

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

Impostazione degli attributi nel metodo factory genera un errore wrong number of arguments (0 for 1)

Lavorare in Ruby 1.9.3, senza Rotaie, utilizzando Factory.build. FactoryGirl 4.1.

EDIT: Per maggiori informazioni:

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

+0

Sembra una definizione FactoryGirl standard. Come stai chiamando 'Factory.build'? Potresti pubblicare l'intero contenuto della tua definizione di fabbrica, compresi gli hook 'after_build' o' after_create'? –

+0

OK, fatto. Informazioni aggiunte –

risposta

29

Questo dovrebbe funzionare con la classe:

FactoryGirl.define do 

    factory :model do 
    skip_create 

    width 5 
    height 9 

    initialize_with { new(attributes) } 
    end 
end 

- skip_create bypassa l'azione predefinita save! normalmente invitato nuovi oggetti.

-Il metodo attributes genera un hash che è possibile passare a new utilizzando initialize_with.

+0

Passa a un hash vuoto. 'initialize_with {{height: 5, width: 6}}' passa nell'hash appropriato, ma la factory restituisce l'hash anziché l'oggetto model. –

+0

Hai ragione; non ci dovrebbe essere un ignore block. Rimuovendolo ora. –

+0

Sta funzionando. Grazie! –

Problemi correlati