[rspec-users] Loading problem with engine extending ActionController::Base
dchelimsky at gmail.com
Sat Jul 3 16:43:42 EDT 2010
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
> 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
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.
> 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.
More information about the rspec-users