3

Authlogic と ActiveRecord SessionStore を使用する Rails 3.1 アプリケーションで簡単な統合テストを作成しようとしていますが、壁にぶつかっています。

最初に、私は古典的なアプローチを試みました:require "authlogic/test_case"回線が既に存在することを確認した後、セッションを作成するためにtest_helper.rb呼び出しactivate_authlogicて使用するセットアップ メソッドを作成しました。UserSession(@user)

これによりセッションが作成されましたが ( で証明されているようにUserSession.find)、get保護されたリソースで要求を実行すると、応答はログイン フォームへのリダイレクトとなり、セッションは強制終了されました (つまり、UserSession.findが返されますnil) 。

メール/パスワードもPOSTしてみましたが、セッションストアをcookie_storeに戻した場合にのみ機能するようです(このコメントから見つけたもの)。

テストのためだけにセッション ストアを切り替えるCookieStoreことはオプションですが、既に ActiveRecord ストアに依存しているいくつかのテストがあります。

1 回のテストのためだけにセッション ストアを切り替える方法はありますか? 私が見逃しているこの問題に対する他の解決策はありますか?

require 'test_helper'

class ProtectedTest < ActionController::IntegrationTest
  def setup
    activate_authlogic
    @user = Factory(:user, :roles => 'user')
    UserSession.create(@user)
  end

  def test_protected
    https!
    get '/protected'
    assert_response :success
  end
end
4

1 に答える 1

0

未来からの親愛なる人々:

'test_helper'を含める前にENV["RAILS_ENV"]を設定して、別の環境で許可されたユーザーを必要とするテストを開始することで、これに対する回避策を見つけました。次にsession_store、その環境でcookie_storeに変更しました。

ENV["RAILS_ENV"] = "test_cs"
require 'test_helper'
end

class ProtectedTest < ActionController::IntegrationTest
  # ...
end
于 2011-11-18T09:26:18.333 に答える