2

我是新手,測試和factory_girl,我想通過關聯使用factory_girl爲has_many創建工廠。
我在網上看過很多文章,但看不到最好的辦法。我有兩個型號,WidgetFeature
該協會是:如何通過關聯定義工廠的has_many

class Feature < ActiveRecord::Base 
    has_many :widget_features 
    has_many :widgets, :through => :widget_features 
end 

class Widget < ActiveRecord::Base 
    has_many :widget_features 
    has_many :features, :through => :widget_features 
end 

到目前爲止,我已經試過這樣:

  1. 在我widget_feature_spec.rb,我這樣做是

require 'spec_helper'

describe WidgetFeature do 

    context "- METHOD - method_name " do 
    it "should do blah" do 
     widget = Factory.create(:widget) 
     10.times { |i| Factory.create(:feature, :widget_id => widget.id)} 
     result = WidgetFeature.method_name(widget.id) 
     # do all the checks and expectations now 
    end 
    end 
end 

許多工廠都

Factory.define :feature do |f| 
    f.name "Feature_name" 
    f.description "Feature_description" 
    f.association :widget 
end 

Factory.define :widget do |f| 
    f.sequence(:title) {|n| "Widget_title#{n}"} 
end 

但測試失敗,給這個錯誤:

NoMethodError:undefined method `widget_id=' for #

然後,如果我添加

f.widget_id Factory.create(:widget).id

我的特點的工廠,我得到這個錯誤,

/factory_girl/factory.rb:334:in `factory_by_name': No such factory: widget (ArgumentError)

我不知道該怎麼辦。我相信我沒有把握好。爲這些協會創建工廠的最佳方式是什麼?
我是否應該在WidgetFeatureWigdetFeature中創建關聯?

+0

我假設你有一個widget_features連接表,你沒有向我們展示了,是嗎? – jaydel

回答

0

嘗試改變行:

10.times { |i| Factory.create(:feature, :widget_id => widget.id)} 

10.times { |i| Factory.create(:feature, :widget => widget)}