Как определить фабрики для has_many через ассоциацию - PullRequest
2 голосов
/ 22 июня 2011

Я новичок в тестировании и 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

До сих пор я пробовал это:

  1. В моем 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 ??

1 Ответ

0 голосов
/ 22 июня 2011

Попробуйте изменить строку:

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

на

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