Factory_girl Association 검증
-
20-09-2019 - |
문제
부모 모델이있는 문제가 있습니다. Foo
, 둘 다 has_many :bars
그리고 has_many :bazes
. 마지막으로 조인 모델도 있습니다 BarBaz
어느 belongs_to :bar
그리고 belongs_to :baz
. 바와 바즈가 모두 같은 foo에 속하도록 모든 bar_bazes를 검증하고 싶습니다. 그러나 유효한이 모델의 공장을 정의하는 방법을 찾을 수없는 것 같습니다.
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
Bar와 BAZ Factory_girl은 각각 자신의 foo를 가지고 있기 때문에 후자를 만들려고 할 때 유효하지 않은 레코드 오류가 발생합니다. 내가 망쳐 졌어?
해결책
이 문제에 대해 몇 시간 동안 머리를 때린 후 마침내 해결책이 있다고 생각합니다. 그래도 꽤 미쳤으므로 다른 사람이 내가 어리석은 곳을 보여줄 수 있기를 바랍니다.
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가 필요하다는 것입니다. 공장에서만 공장을 통해 얻을 수 있습니다. 로컬 변수 또는 공장에서 임의의 루비 코드를 사용할 수 있기 때문입니다.
다른 팁
깊이 중첩 된 연관성을 가진 공장을 만드는 데있어서 고정 activeRecord를 사용하여 테스트 레코드를 만들 수 있습니다. 그것은 동안 실행됩니다 db:test:prepare
단계. 나는 그것을 사용하여 비품의 필요성을 제거합니다. 건축하기 쉬운 물건을 위해 공장을 계속 사용할 수 있습니다.
제휴하지 않습니다 StackOverflow