Thank you for the reply, Colin. I should have been more descriptive,
so let me elaborate:
Say I have the following models and factories:
# models
class Game < ActiveRecord::Base
validates :name, :presence => true, :uniqueness => true
validates :url, :presence => true, :uniqueness => true
end
class Server < ActiveRecord::Base
belongs_to :game
validates :name, :presence => true
validates :game, :presence => true
end
class Character < ActiveRecord::Base
belongs_to :server # now we can chain character.server.game
validates :name, :presence => true
end
# test/factories.rb
Factory.define :game do |g|
g.name "Foo"
g.url "www.example.com"
end
Factory.define :server do |s|
s.name "Bar"
s.game { |x| x.association(:game) }
end
Factory.define :character do |c|
c.name "Blah"
c.server { |x| x.association(:server) }
end
Now, let's say I want to call Factory(:character). It all gets set up
and returned properly as it should. But let's say I have the
following in my factories thereafter:
Factory.define :character2 do |c|
c.name "Bleh"
c.server { |x| x.association(:server) }
end
Logically, I'd expect factory_girl to try to create the :server
object, and if it fails, look for it in the database and set the
assignment of that association to what comes out of the DB if
something already exists. But it doesn't do that. Instead, FG will
cause an error in tests (not a failure, an actual error) that will say
that the name and url are already taken. After shaking my fists in
the air and pounding my head on the desk, I reply, "YES, I KNOW
they're taken, that's because I want the association on an EXISTING
OBJECT!"
Am I just plain doing it wrong here? Any input you have would be
appreciated. Thank you!
On Dec 27, 7:16 am, Colin Law <clan...@googlemail.com> wrote:
> On 27 December 2010 14:07, Phoenix Rising <polarisris...@gmail.com> wrote:
>
>
>
>
>
>
>
>
>
> > Hey guys,
>
> > I've been practicing TDD on my rails apps for a while now, and I'm
> > constantly plagued by factory girl and its association support. It
> > really irks me to see that a test failed because object A calls
> > a.association ... on object B which calls b.association on ... which
> > tries to instantiate a duplicate of object C, which already exists,
> > and so its uniqueness validations fail, causing the whole chain of the
> > test to explode.
>
> > I've been chasing this damn chicken-or-the-egg problem for a while,
> > but ultimately I'm wondering if it's time to scrap factory girl and
> > look at something else. Problem is, most of the other alternatives,
> > Machinist being the primary one I know about, don't appear to have
> > been updated to work with Rails 3 (and there's no way I'm going back
> > to 2.x!).
>
> > So, that said, can you recommend some relatively recent and up-to-date
> > fixture replacement frameworks for Rails, or is factory_girl really
> > about my only option?
>
> I cannot say that I understand the problem you are describing, but
> Machinist is working fine for me on Rails 3.
>
> Colin
--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
No comments:
Post a Comment