проверки ассоциации factory_girl

У меня есть проблема, где у меня есть родительская модель Foo, который оба has_many :bars и has_many :bazes. Наконец, у меня также есть модель соединения BarBaz который belongs_to :bar и belongs_to :baz. Я хочу проверить весь bar_bazes так, чтобы его панель и baz оба принадлежали тому же нечто. Но я, может казаться, не выясняю способ определить фабрику для этой модели, которая была бы действительна.

Factory.define(:bar) do |bar|
  bar.association(:foo)
end

Factory.define(:baz) do |baz|
  bar.association(:foo)
end

Factory.define(:bar_baz) do |bar_baz|
  baz_bar.association(:foo)
  baz_bar.association(:bar)
  baz_bar.association(:baz)
end

Я получаю недопустимую рекордную ошибку, когда я пытаюсь создать последнего, потому что панель и baz factory_girl пытаются связать ее, у каждого есть их собственное нечто. Я завинчен?

6
задан tfwright 24 January 2010 в 21:50
поделиться

2 ответа

Так что после нескольких часов избиения головы против этой проблемы, я думаю, что у меня наконец-то есть решение. Это довольно безумно, хотя, надеюсь, кто-то еще может по-прежнему показать мне, где я глуп.

Factory.define :foo do |foo|
end

Factory.define :bar do |bar|
end

Factory.define :baz do |baz|
end

Factory.define :foo_with_baz do |foo|
  foo.after_create { |foo| Factory(:baz, :foo => foo) }
end

Factory.define :bar_baz do |bar_baz|
  bar_baz.bar {|bar| bar.association(:bar, :foo => Factory(:foo_with_baz))
  bar_baz.after_build {| bar_baz| bar_baz.baz_id = bar_baz.foo.bars.first.id }
end

Ключевой проблемой является то, что необходимо, чтобы быть Foo в базе данных, уже вы можете получить только через фабрики, поскольку вы можете использовать локальные переменные или произвольный код Ruby на факториях.

5
ответ дан 17 December 2019 в 04:47
поделиться

Несолюсность создания заводов с глубоко вложенными ассоциациями привела меня к созданию Fixie , которое позволяет создавать тестовые записи с использованием ActiveRecord. Он работает во время дБ: тест: готовьте шаг. Я использую его, чтобы устранить необходимость в приборах. Вы можете продолжать использовать заводы для более упрощения объектов для создания.

0
ответ дан 17 December 2019 в 04:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: