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
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users