Module: RSpec::Rails::ControllerExampleGroup::ClassMethods
- Defined in:
- lib/rspec/rails/example/controller_example_group.rb
Overview
Class-level DSL for controller specs.
Instance Method Summary (collapse)
-
- (Object) controller(base_class = nil, &body)
Supports a simple DSL for specifying behavior of ApplicationController.
-
- (Object) routes
Specifies the routeset that will be used for the example group.
Instance Method Details
- (Object) controller(base_class = nil, &body)
Due to Ruby 1.8 scoping rules in anonymous 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
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/rspec/rails/example/controller_example_group.rb', line 61 def controller(base_class = nil, &body) if RSpec.configuration.infer_base_class_for_anonymous_controllers? base_class ||= controller_class end base_class ||= defined?(ApplicationController) ? ApplicationController : ActionController::Base new_controller_class = Class.new(base_class) do def self.name root_controller = defined?(ApplicationController) ? ApplicationController : ActionController::Base if superclass == root_controller || superclass.abstract? "AnonymousController" else superclass.name end end end new_controller_class.class_exec(&body) (class << self; self; end).__send__(:define_method, :controller_class) { new_controller_class } before do @orig_routes = routes resource_name = if @controller.respond_to?(:controller_name) @controller.controller_name.to_sym else :anonymous end resource_path = if @controller.respond_to?(:controller_path) @controller.controller_path else resource_name.to_s end resource_module = resource_path.rpartition('/').first.presence resource_as = 'anonymous_' + resource_path.tr('/', '_') self.routes = ActionDispatch::Routing::RouteSet.new.tap do |r| r.draw do resources resource_name, :as => resource_as, :module => resource_module, :path => resource_path end end end after do self.routes = @orig_routes @orig_routes = nil end end |
- (Object) routes
Specifies the routeset that will be used for the example group. This is most useful when testing Rails engines.
119 120 121 122 123 |
# File 'lib/rspec/rails/example/controller_example_group.rb', line 119 def routes before do self.routes = yield end end |