在我的API规范中访问会话

时间:2012-04-15 13:22:37

标签: ruby-on-rails rspec

我正在开发一个API,并希望测试登录方法。 API的规范位于spec/api/而不是spec/controller。我正在使用rspec-rails。现在我有一个这样的规范:

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区块中添加一些内容?

2 个答案:

答案 0 :(得分:1)

如果您的会话已启用,我猜您可以使用env['rack.session']获得该会话。

我也会推荐你这个啧啧http://railscasts.com/episodes/280-pry-with-rails 使用pry有很多优点,你可以在你的规范中编写binding.pry并调试它

答案 1 :(得分:0)

约。我用谷歌搜索了200个小时。

归结为这些神奇的话:

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

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