From 51c58eecd6515459212075582cccb16843563549 Mon Sep 17 00:00:00 2001 From: Jon Rowe Date: Thu, 6 Feb 2014 15:48:59 +1100 Subject: [PATCH] work around lack of application controller by defaulting to ac::base fixes #922 --- .../rails/example/controller_example_group.rb | 3 +- .../example/controller_example_group_spec.rb | 46 +++++++++++++++---- 2 files changed, 38 insertions(+), 11 deletions(-) diff --git a/lib/rspec/rails/example/controller_example_group.rb b/lib/rspec/rails/example/controller_example_group.rb index 916787aa45..dcd9416c85 100644 --- a/lib/rspec/rails/example/controller_example_group.rb +++ b/lib/rspec/rails/example/controller_example_group.rb @@ -55,9 +55,10 @@ def controller_class # # .... # end 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 : - ApplicationController + root_controller metadata[:example_group][:described_class] = Class.new(base_class) do def self.name; "AnonymousController"; end diff --git a/spec/rspec/rails/example/controller_example_group_spec.rb b/spec/rspec/rails/example/controller_example_group_spec.rb index 28597bdb16..a95726f933 100644 --- a/spec/rspec/rails/example/controller_example_group_spec.rb +++ b/spec/rspec/rails/example/controller_example_group_spec.rb @@ -80,20 +80,46 @@ module RSpec::Rails allow(group).to receive(:controller_class).and_return(Class.new) end - it "infers the anonymous controller class when infer_base_class_for_anonymous_controllers is true" do - allow(RSpec.configuration).to receive(:infer_base_class_for_anonymous_controllers?).and_return(true) - group.controller { } + context "when infer_base_class_for_anonymous_controllers is true" do + before do + allow(RSpec.configuration).to receive(:infer_base_class_for_anonymous_controllers?).and_return(true) + end + + it "infers the anonymous controller class" do + group.controller { } + + controller_class = group.metadata[:example_group][:described_class] + expect(controller_class.superclass).to eq(group.controller_class) + end + + it "infers the anonymous controller class when no ApplicationController is present" do + hide_const '::ApplicationController' + group.controller { } - controller_class = group.metadata[:example_group][:described_class] - expect(controller_class.superclass).to eq(group.controller_class) + controller_class = group.metadata[:example_group][:described_class] + expect(controller_class.superclass).to eq(group.controller_class) + end end - it "sets the anonymous controller class to ApplicationController when infer_base_class_for_anonymous_controllers is false" do - allow(RSpec.configuration).to receive(:infer_base_class_for_anonymous_controllers?).and_return(false) - group.controller { } + context "when infer_base_class_for_anonymous_controllers is false" do + before do + allow(RSpec.configuration).to receive(:infer_base_class_for_anonymous_controllers?).and_return(false) + end + + it "sets the anonymous controller class to ApplicationController" do + group.controller { } + + controller_class = group.metadata[:example_group][:described_class] + expect(controller_class.superclass).to eq(ApplicationController) + end + + it "sets the anonymous controller class to ActiveController::Base when no ApplicationController is present" do + hide_const '::ApplicationController' + group.controller { } - controller_class = group.metadata[:example_group][:described_class] - expect(controller_class.superclass).to eq(ApplicationController) + controller_class = group.metadata[:example_group][:described_class] + expect(controller_class.superclass).to eq(ActionController::Base) + end end end end