2011-11-07 15 views
9

Rspecを使用してコントローラをテストしています。パスを要求する前に、テスト中の現在のコントローラのセッション変数を設定できないようです。Rspec 2.7リクエスト前にコントローラのセッションにアクセスする

describe "GET /controller/path" do 
    it "if not matching CRSF should display message" do 
     get controller_path 

     request.session[:state] = "12334" 
    end 
    end 

これは動作しません(私はセッションがnilクラスのメソッドではないというエラーを取得する)::

 describe "GET /controller/path" do 
     it "if not matching CRSF should display message" do 
      request.session[:state] = "12334" 
      get controller_path 
     end 
     end 

任意のアイデアこの作品例 ?

答えて

6

これを試してみてください:

describe "GET /controller/path" do 
    it "if not matching CRSF should display message" do 
     session[:state] = "12334" 
     get controller_path 
    end 
    end 
9

をRSpecの新しいバージョンでは、これはかなりいい行われ、見て:

describe SessionController do 
    # routes are mapped as: 
    # match 'login' => 'session#create' 
    # get 'logout' => 'session#destroy' 

    describe "#create" do 
    context "with valid credentials" do 
     let :credentials do 
     { :email => 'example[email protected]', :password => 'secret' } 
     end 

     let :user do 
     FactoryGirl.create(:user, credentials) 
     end 

     before :each do 
     post '/login', credentials 
     end 

     it "creates a user session" do 
     session[:user_id].should == user.id 
     end 
    end 

    # ... 
    end 

    describe "#destroy" do 
    context "when user logged in" do 
     before :each do 
     get "/logout", {}, { :user_id => 123 } # the first hash is params, second is session 
     end 

     it "destroys user session" do 
     session[:user_id].should be_nil 
     end 

     # ... 
    end 
    end 
end 

また、単にrequest.session[:user_id] = 123before(:each)内部のブロックを使用していますが、上記のかなり立派に見えることができます。

+1

それが2016で動作するはずです) は(セッションを期待していますそれは、ユーザを認証しなければならない 'は、このチェック でエラーが発生していますか?[:user_idを]を。)(user.idをeqでする) 終了 –

関連する問題