Module: RSpec::Rails::ControllerExampleGroup::ClassMethods

Defined in:
lib/rspec/rails/example/controller_example_group.rb

Instance Method Summary collapse

Instance Method Details

#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

Examples:


describe ApplicationController do
  controller do
    def index
      raise ApplicationController::AccessDenied
    end
  end

  describe "handling AccessDenied exceptions" do
    it "redirects to the /401.html page" do
      get :index
      response.should redirect_to("/401.html")
    end
  end
end


56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/rspec/rails/example/controller_example_group.rb', line 56

def controller(base_class = nil, &body)
  base_class ||= RSpec.configuration.infer_base_class_for_anonymous_controllers? ?
                   controller_class :
                   ApplicationController

  [:example_group][:described_class] = Class.new(base_class, &body)
  [:example_group][:described_class].singleton_class.class_eval do
    def name; "AnonymousController" end
  end

  before do
    @orig_routes, @routes = @routes, ActionDispatch::Routing::RouteSet.new
    @routes.draw { resources :anonymous }
  end

  after do
    @routes, @orig_routes = @orig_routes, nil
  end
end

#controller_classObject



17
18
19
# File 'lib/rspec/rails/example/controller_example_group.rb', line 17

def controller_class
  described_class
end