2011-09-12 19 views
7

Railsの統合テストでは、セッション変数(私の場合はuser_id)を設定するにはどうすればよいですか?Railsの統合テストでセッション変数を設定する方法

明らかに、完全な統合テストではありませんが、私のアプリでは、ユーザーの手動による認証なしにユーザーの認証が行われないことを考えれば、何とか回避してセッション変数を手動で設定できますか?

「セッション」はそのスコープでは使用できません。open_sessionは、更新方法が見つからなかったセッションを返します。

答えて

1

手動での操作なしに認証が行われないのはなぜですか?それはCAPTCHAを使用していますか?その場合は、テスト環境で実行するための部分をスタブしてください。

+0

これはTwitterやFacebookには反対です。 – jbasko

+0

これは役に立ちますか? http://stackoverflow.com/questions/5331045/testing-a-web-applications-facebook-integration-with-cucumber –

5

私が言う限り、あなたはできません。統合テストのセッション値 (レール3.2.2)はコピーです。 (レール神:もし私が であれば私を修正してください。)値を設定することはできますが、それは実際のセッションのローカルコピーであるため、次のget/post には影響しません。アサートテストには最適です。 は、統合テスト中にセッション状態を維持するためにはそれほど大きくありません。

私は、エバーグリーンによるJavaScriptテストをサポートするテストコントローラを用意しています。

私の解決策は、テスト用のコントローラにメソッドを追加することでした。生産時には のルートを使用できるため、セッション値を設定できます。

私のapp_test#set_sessionメソッドは、接頭辞にパラメータ名 を表示します。接頭辞が見つかった場合は、接頭辞を取り除いたパラメータ名の のセッションの値が設定されます。何かのように:「セッションとして

prefix = "set_session_" 
    post("/set_session.html", { (prefix + "user_id") => "My Name Is Mudd" }) 

としてきれいではありません:だから

params.each() do |key, value| 
      next if (key !~ /^set_session_/) 
      session[ key.slice(("set_session_".size())..-1).to_sym ] = value 
    end 
    # don't forget to render something/anything 

、私の統合テスト中にセッション変数を設定するには、私のようなコードの小さな チャンク持つ[を:USER_ID] = '私の名前はマッドだ ""しかし、それは動作します。 次の投稿/取得には、セッション[:user_id]が目的の値に設定されています。

これは簡単に整数や記号などを渡すために拡張されており、もちろん 複数のセッションキーと値のペアを一度に設定できます。かわいいですが、 悪くありません。

関連する問題