FactoryGirl and after_initalize

December 05, 2014

I use FactoryGirl for testing, and found a major problem and solution last week.

The Problem

We use Rails after_initialization callbacks in object construction, but Rails was acting as if the parameters that we passed to FactoryGirl build or create calls weren’t there.

Well, they weren’t, at least not at object initialization..

What’s Going On

Turns out that FactoryGirl’s default behavior is to new or create the object with no arguments, and then set the properties after object initialization. Hey, guess what? That’s too late for use in after_initialization callbacks.

Solution

You can customize a Factory’s constructor to pass certain (or all) parameters to a particular factory. I had the best luck using the big hammer of

initialize_with { new(attributes) }

Your results may vary.

Thanks to @typed for pointing this out!

Tags: rails, testing
comments powered by Disqus