2012-10-18 9 views
11

看起來很簡單,但一直未能弄清楚如何讓這個工作。如何將FactoryGirl與在初始化方法中使用散列的模型一起使用?

在model.rb:

def Model 
    attr_accessor :width, 
       :height 

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

在出廠文件models.rb

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

在工廠方法設置的屬性會引發錯誤wrong number of arguments (0 for 1)

用Ruby 1.9.3不工作Rails,使用Factory.build。 FactoryGirl 4.1。

編輯:更多信息:

使用RSpec的:let(:model) { FactoryGirl.build :model }

+0

這看起來像一個標準的FactoryGirl定義。 你打電話給'Factory.build'?你可以發佈你的工廠定義的全部內容,包括任何'after_build'或'after_create'掛鉤? –

+0

好的,完成了。增加了信息。 –

回答

29

這應該與你的班上做:

FactoryGirl.define do 

    factory :model do 
    skip_create 

    width 5 
    height 9 

    initialize_with { new(attributes) } 
    end 
end 

- skip_create繞過默認save!行動通常被稱爲新的對象。

-The attributes方法生成一個散列,您可以使用initialize_with傳遞給new

+0

這通過一個空的散列。 'initialize_with {{height:5,width:6}}'傳入適當的散列,但工廠返回散列而不是模型對象。 –

+0

你是對的;不應該有一個忽略塊。現在刪除它。 –

+0

它正在工作。謝謝! –

相關問題