Я новичок в тестировании и factory_girl, и я хочу создать фабрики, использующие factory_girl для связи has_many через *. 1001 *
Я видел много статей в Интернете, но не мог найти лучший способ сделать это.
У меня есть две модели, 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
До сих пор я пробовал это:
- В моем widget_feature_spec.rb я сделал это
требуется '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 = 'для #
Тогда, если я добавлю
f.widget_id Factory.create (: widget) .id
на мои фабрики Feature, я получаю эту ошибку,
/ factory_girl / factory.rb: 334: в `factory_by_name ': Нет такой фабрики: widget (ArgumentError)
Я не знаю, что делать. Я считаю, что я не понимаю это правильно. Как лучше всего создавать фабрики для таких объединений.
Должен ли я создавать ассоциации в WidgetFeature
ИЛИ Wigdet
и Feature
??