If you are new to this. First read this article about Anonymous Controller. That should answer 98% of your questions. However, if you run in to problems the following tid bits of information might help ;)
Summary of Anonymous Controller
(code stolen from https://www.relishapp.com/rspec/rspec-rails/v/3-0/docs/controller-specs/anonymous-controller)
class ApplicationController < ActionController::Base
class AccessDenied < StandardError; end
rescue_from AccessDenied, :with => :access_deniedprivate
def access_denied
redirect_to "/401.html"
end
end
require "rails_helper"
RSpec.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
expect(response).to redirect_to("/401.html")
end
end
end
Gotchas
Missing helper methods
If RSpec is having problems finding your helper methods within the Anonymous controller (it shouldn’t, because by default the controller should inherit from the controller you are testing), try the following.
require "rails_helper"
RSpec.describe ApplicationController do
controller(ApplicationController) do
def index
raise ApplicationController::AccessDenied
end
end
end
Anonymous Controller Routes
RSpec magic only define resource routes by default. Meaning your usual index new create…etc actions will work without any issues. However, if you were to introduce a action outside of this, the routing wouldn’t be in place and you’d run in to problems. Example bellow.
require "rails_helper"
RSpec.describe ApplicationController do
controller do
def test_action
raise ApplicationController::AccessDenied
end
end
describe "handling AccessDenied exceptions" do
it "redirects to the /401.html page" do
get :test_action
expect(response).to redirect_to("/401.html")
end
end
end
References
- https://www.relishapp.com/rspec/rspec-rails/v/3-0/docs/controller-specs/anonymous-controller
- https://stackoverflow.com/questions/4739116/how-to-test-applicationcontroller-method-defined-also-as-a-helper-method
- https://gayleforce.wordpress.com/2012/12/01/testing-rails-before_filter-method/
Happy Testing!