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