1. ホーム
  2. ruby-on-rails

Rails/Rspec httpの基本認証でテストを通過させる

2023-10-13 10:34:57

質問

アプリケーションコントローラファイル(application_controller.rb)でのhttp基本認証は以下の通りです。

before_filter :authenticate

protected

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

と、ホームコントローラのindexアクションのデフォルトテスト(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

認証方式が原因でテストが実行されません。私はそれらを実行するために "before_filter :authenticate" をコメントすることができましたが、私はそれらがメソッドで動作するようにする方法があるかどうかを知りたいのです。

ありがとうございます。

どのように解決するのですか?

更新 (2013): Matt Connollyがリクエストやコントローラの仕様にも対応したGISTを提供しています。 http://gist.github.com/4158961


実行するテストが多く、毎回インクルードしたくない場合(DRYerなコード)の別の方法です。

spec/support/auth_helper.rb ファイルを作成します。

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

テスト仕様ファイルの中で

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

クレジット ここで