How do I isolation test against different gem versions?

I would like to support both ActiveRecord 2.x and ActiveModel 3.x for
a given library. It is not clear to me how to write tests for this. If
I require ‘active_record’ then all of the dependencies are also loaded
and are now in the load path as well as the Gem loaded list.
Considering that AR and AM share dependencies but of different
versions conflicts occur.

Is this possible? The difference in code is not enough to warrant
breaking into separate gems.

On Sun, May 23, 2010 at 11:41 AM, Brian C.
[email protected] wrote:

I would like to support both ActiveRecord 2.x and ActiveModel 3.x for
a given library. It is not clear to me how to write tests for this. If
I require ‘active_record’ then all of the dependencies are also loaded
and are now in the load path as well as the Gem loaded list.
Considering that AR and AM share dependencies but of different
versions conflicts occur.

Is this possible? The difference in code is not enough to warrant
breaking into separate gems.

I do something similar for RiCal, which works using either
activesupport or the tzinfo gem. I’ve set up rake tasks to run the
specs with either one.

What I do is to have an auxiliary ruby file to do the right require
which the spec task invokes via the -r option.

You should be able to do something similar by having the auxiliary
files use the gem directive to specify a particular version of
active_record.

Have a look at ri_cal/tasks at master · rubyredrick/ri_cal · GitHub

Particularly spec.rake and the files in the gem_loader sub directory.

HTH


Rick DeNatale

Blog: http://talklikeaduck.denhaven2.com/
Github: rubyredrick (Rick DeNatale) · GitHub
Twitter: @RickDeNatale
WWR: http://www.workingwithrails.com/person/9021-rick-denatale
LinkedIn: http://www.linkedin.com/in/rickdenatale

On May 23, 2010, at 12:55 PM, Brian C. wrote:

Rick,

Cool, this looks like it should work. My original approach was to
find something that would work under autospec but I think that might
be getting too greedy in this case.

You could hook that up if you want to. Just need clear out the rspec
mappings and replace them with your own - then you could have a
conditional based on a command line param.

I’ve got a few blog posts on configuring autotest:

HTH,
David

Rick,

Cool, this looks like it should work. My original approach was to
find something that would work under autospec but I think that might
be getting too greedy in this case. Thank-you!

  • Brian