2012-04-15 12 views
3

私はAPIを開発しており、ログインメソッドをテストしたいと考えていました。 spec/controllerの代わりにspec/api/にあるAPIの仕様。私はrspec-railsを使用しています。今私はこのような仕様を持っています:API仕様でセッションにアクセス

describe "/api/login.json", :type => :api do 
    let(:user) { FactoryGirl.create(:user) } 

    context "when called with correct credentials" do 
    before(:all) do 
     post "/api/v1/passenger/login.json",:email => user.email, :password => user.password 
    end 

    it "responds with HTTP 200" do 
     last_response.status.should == 200 
    end 

    it "sets the session correctly" do 
     session[:user_id].should == user.id # <-- ### Here ### 
    end 
    end 
end 

これは失敗します。 sessionはゼロです。セッション変数にはどのようにアクセスすればよいですか?

私はRSpec.configureブロックにいくつかのものを含める必要があると思いますか?

+0

あなたは 'request.session'を試みる場合がありますが、私はそれが動作するかどうかはわかりません。 – Deradon

+0

'request'は、':type =>:api'テストのために私のヘルパーに含める 'Rack :: Test :: Methods'で定義されたメソッドです。これは 'post'や' get'と似たメソッドで、パラメータとしてURLを必要とします。したがって、 'request.session'は' ArgumentError例外をスローします。例外:引数の数が不正です(0の場合1) ' – iblue

+0

は説明チェーンの上位に記述されているApi :: LoginControllerですか?私はActionController :: TestCase :: Behaviorが混在しているのだろうかと思います。あなたはcontroller.sessionにアクセスできますか? – oliverbarnes

答えて

0

約後、あなたのスペックとデバッグでbinding.pryを書くことができます。 200時間のグーグル・グーグルで、自分で答えを見つけました。

それはこれらの魔法の言葉に要約:

module FoobarHelper 
    def session 
    last_request.env['rack.session'] 
    end 
end 

RSpec.configure do |c| 
    c.include FoobarHelper, :type => :api 
end 
1

セッションが有効になっている場合は、env['rack.session']で取得できると思います。

私もあなたにこのぇhttp://railscasts.com/episodes/280-pry-with-rails 使用してプライをお勧めしますが、多くの利点を持っている、あなたはそれ