Bug/patch with rspec-rails and helper instance variables

December 06, 2008

I finally got around to upgrading my version of rspec-rails from one that's almost a year old and came across an issue with the way implicit module inclusion is handled.

If you have a handler that uses memoization to cache some information in instance variables such as this (I'm not sure if this is a smell but my project has some examples of it)

module UsersHelper
def all_users
@users ||= User.find(:all)

You would expect this spec to work

describe UsersHelper do
it "should find all users" do
helper.all_users.should == result

Sometimes it does but if any other spec has called helper.all_users previously it will fail as the memoized @users variable is not nil so the collection is reused.

I have submitted a lighthouse patch to rspec-rails that fixes the problem so hopefully they will agree to fix it soon. Until then patch is available on github in my fork or rspec-rails if you want to use it.