我是测试和factory_girl的新手,我想使用factory_girl为has_many通过关联创建工厂。
我在网上看过很多文章,但看不出最好的方法
我有两个模型,Widget
和Feature
协会是:
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
直到现在,我已经尝试过这个:
很多工厂都是要求'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:未定义的方法`widget_id ='for#
然后,如果我添加
f.widget_id Factory.create(:widget).id
到我的功能工厂,我收到此错误,
/factory_girl/factory.rb:334:在`factory_by_name':没有这样的工厂:widget(ArgumentError)
我不知道该怎么办。我相信我没有做对。为这种协会创建工厂的最佳方式是什么
我应该在WidgetFeature
OR Wigdet
和Feature
??
答案 0 :(得分:0)
尝试更改该行:
10.times { |i| Factory.create(:feature, :widget_id => widget.id)}
进入
10.times { |i| Factory.create(:feature, :widget => widget)}