Method: RSpec::Rails::ControllerExampleGroup::ClassMethods#controller
- Defined in:
- lib/rspec/rails/example/controller_example_group.rb
#controller(base_class = nil, &body) ⇒ Object
Note:
Due to Ruby 1.8 scoping rules in anoymous subclasses, constants
defined in ApplicationController must be fully qualified (e.g.
ApplicationController::AccessDenied) in the block passed to the
controller method. Any instance methods, filters, etc, that are
defined in ApplicationController, however, are accessible from
within the block.
Supports a simple DSL for specifying behavior of ApplicationController.
Creates an anonymous subclass of ApplicationController and evals the
body in that context. Also sets up implicit routes for this
controller, that are separate from those defined in "config/routes.rb".
If you would like to spec a subclass of ApplicationController, call controller like so:
controller(ApplicationControllerSubclass) do
# ....
end
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/rspec/rails/example/controller_example_group.rb', line 57 def controller(base_class = nil, &body) root_controller = defined?(ApplicationController) ? ApplicationController : ActionController::Base base_class ||= RSpec.configuration.infer_base_class_for_anonymous_controllers? ? controller_class : root_controller [:example_group][:described_class] = Class.new(base_class) do def self.name; "AnonymousController"; end end [:example_group][:described_class].class_eval(&body) before do @orig_routes = self.routes self.routes = ActionDispatch::Routing::RouteSet.new.tap { |r| r.draw { resources :anonymous } } end after do self.routes = @orig_routes @orig_routes = nil end end |