On Jul 3, 2010, at 3:34 PM, Michael Schuerig wrote:

> I'm working on an engine that extends ActionController::Base like this
> 
> module MyEngine
>  class Engine < Rails::Engine
> 
>    config.after_initialize do
>      ActionController::Base.class_eval do
>        include MyEngine::ControllerExtension
>      end
>    end
>  end
> end
> 
> This works in the development environment (rails server). It does not 
> work for specs. No matter if I run rake spec or rspec spec/some_spec.rb.
> 
> 
> rake spec indirectly loads the application through this line in Rakefile
> 
> require File.expand_path('../config/application', __FILE__)
> 
> in the normal course of rake initialization. During this, 
> ActionController::Base is loaded and the #after_initialize callback of 
> MyEngine is called.
> 
> Then, when a spec is loaded, that in turn loads spec/spec_helper.rb, 
> containing this line
> 
> require File.dirname(__FILE__) + "/../config/environment" unless 
> defined?(Rails)

This is from an old version of the spec_helper. Be sure to follow the 
post-install instructions (that's what they're there for) and run "script/rails 
generate rspec:install".

The newer generated spec_helper uses File.expand_path for this require, so it 
doesn't load the file a second time. I believe that will fix this issue for you.

HTH,
David

> 
> Which causes, among other things, a reload of ActionController::Base, 
> but this time the engine callback is *not* executed. Thus, the specs 
> blow up as soon as they run into a method defined in the engine. But, 
> wait, why is that require executed at all? Isn't Rails defined at that 
> point? Apparently it is not and I have no idea why.
> 
> rspec spec/some_spec.rb is slightly different. Here 
> ActionController::Base is loaded just once, but the engine callback is 
> not executed.
> 
> rspec and associated gems are 2.0.0.beta.15
> rails is 3.0.0.beta4
> 
> I'm stumped.
> 
> Michael

_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to