ruby-on-railsrspechttp-authentication

Rails/Rspec Make tests pass with http basic authentication


Here's my http basic authentication in the application controller file (application_controller.rb)

before_filter :authenticate

protected

def authenticate
  authenticate_or_request_with_http_basic do |username, password|
    username == "username" && password == "password"  
  end
end

and the default test for the index action of my home controller (spec/controllers/home_controller_spec.rb)

require 'spec_helper'

describe HomeController do

describe "GET 'index'" do
  it "should be successful" do
    get 'index'
    response.should be_success
  end
end

The test doesn't run because of the authentication method. I could comment out "before_filter :authenticate" to run them but I would like to know if there is way to make them worked with the method.

Thank you!


Solution

  • Update (2013): Matt Connolly has provided a GIST which also works for request and controller specs: http://gist.github.com/4158961


    Another way of doing this if you have many tests to run and don't want to include it everytime (DRYer code):

    Create a /spec/support/auth_helper.rb file:

    module AuthHelper
      def http_login
        user = 'username'
        pw = 'password'
        request.env['HTTP_AUTHORIZATION'] = ActionController::HttpAuthentication::Basic.encode_credentials(user,pw)
      end  
    end
    

    In your test spec file:

    describe HomeController do
      render_views
    
      # login to http basic auth
      include AuthHelper
      before(:each) do
        http_login
      end
    
      describe "GET 'index'" do
        it "should be successful" do
          get 'index'
          response.should be_success
        end
      end
    
    end
    

    Credit here - Archived site