Search code examples
ruby-on-railsruby-on-rails-3testingfunctional-testingbefore-filter

How to test application controller before filter methods in Rails 3?


I have a before_filter on my ApplicationController class and I want to write a test for it? Where should I write this test into? I do not want to go into every subclass controller test file and repeat the test about this filter.

Hence, what is the recommended way to test ApplicationController before_filters?

Note that I am using Rails 3.2.1 with minitest.


Solution

  • My case is slightly different than yours, but I needed to do something similar to test authentication across the site (with Devise). Here's how I did it:

    # application_controller.rb
    class ApplicationController < ActionController::Base
      before_filter :authenticate_user!
    end
    
    # application_controller_test.rb
    require 'test_helper'
    
    class TestableController < ApplicationController
      def show
        render :text => 'rendered content here', :status => 200
      end
    end
    
    class ApplicationControllerTest < ActionController::TestCase
      tests TestableController
    
      context "anonymous user" do
        setup do
          get :show
        end
        should redirect_to '/users/sign_in'
      end
    end
    

    If there's specific controllers that need to skip the before filter I'll have a test to make sure they skip it in the specific controller's tests. This isn't quite your situation as I'm interested in the effect of the method, not just knowing it was invoked, but I thought I'd share in case you found it useful.