2012-01-04 15 views
8

統合テストにrspecとcapybaraを使用しています。rspec統合テストのセッションオブジェクト

セッションオブジェクトをリクエスト仕様にする方法はありますか?

セッションオブジェクトを使用して値をチェックして選択的なコンテンツを表示するビューページがあります。

問題は、要求仕様でセッションオブジェクトを作成できないことです。ここ は、図の一例である:

<% if session[:role] == "Role" %> 
---content--- 
<% else %> 
--content-- 
<% end %> 

そして、私の要求スペック

session[:role] = "Role" 
visit my_path 

内側しかし、それはエラー「nilのための未定義のメソッド `セッション」:NilClass」私をスローします。

また、私はcapybara.Butのセッションオブジェクトを作成しようとすると何も見つかりませんでした。

これらの回避策はありますか?私はこれに関連する何かを見つけることができません、それは可能ではないようです。少しの助けは本当に感謝しています。

+0

ifの内部では、おそらく=の代わりに==を意味していました。 ,,しかし、マイルをworking.whatないクッキー[:::役割] = "コーチング"、 Capybara.current_session.driver.browser.set_cookie(クッキー[役割]) –

+0

はい、私はこれを試し –

答えて

3

リクエスト仕様を行う方法は、そのセッション変数を設定するために通常訪問する必要のあるURLを訪問することです。

私は、セッションクッキーを手作業で設定する以外の方法は分かりません。 Capybara.current_session.driver.browser.set_cookieこれをやりましょうが、手でクッキー値を作成する必要があります。

+0

ここ==、私は意味ごめんなさい間違っている? –

+1

これはセッションを設定しません。 railsがセッションクッキーを生成する方法を再現し、その出力をset_cookieの呼び出しで使用する必要があります。あなたは間違いなくここの暴かれた道から離れています - 私は通常のアプローチは、セッションを設定するページを訪問することだと思っています –

+0

私の場合、私はこれらのセッションをアプリケーションコントローラのプライベートメソッドに設定します。 –