2

Rails 3 アプリでかなり基本的な HTTP ダイジェスト認証をセットアップしました。ほとんどの場合、Rails Controller Guideにある例に従います。

私の ApplicationController には before_filter があります:

def digest_authenticate
  success = authenticate_or_request_with_http_digest("Application") do |username|
    APP_CONFIG["admin"]
  end
end

これはすべてうまくいきます。ページは保護されている必要があります。

私は今、RSpec でこれをテストしようとしていますが、惨めに失敗しています。

私はこのSOの受け入れられた答えに従い、そのauthenticate_with_http_digest方法をサポートファイルに入れました。これが私の実際のテストです:

describe DashboardController do
  describe "GET 'index'" do
    it "returns http success" do
      authenticate_with_http_digest(foo, bar, baz)

      visit root_path
      response.should be_success
      response.code.should == '200'
    end
  end
end

いくつかの問題:

  1. 私が電話するかどうかにかかわらず、テストは毎回合格していますauthenticate_with_http_digest
  2. 私が渡してauthenticate_with_http_digestいる引数は偽物であり、問​​題ではないようです。これらは、私が保存したものと一致する必要はありませんAPP_CONFIG["admin"]か?
  3. before_filterの値をsuccess出力digest_authenticateすると、rspec ヘルパーに正しいパラメーターを渡しても、常に 401 が出力されます。

HTTP ダイジェスト認証を効果的にテストする方法はありますか?

ありがとう!

4

1 に答える 1

2

コントローラーのテストでは、get :index呼び出しではなく呼び出しを使用する必要がありvisit root_pathます。これは、コントローラーをテストしている HTTP 動詞と Rails アクションの有効な組み合わせに対して機能します。

このvisitメソッドは Capybara の一部であり、リクエスト仕様でのみ使用する必要があります。

于 2012-12-20T00:16:32.043 に答える