Rails功能测试与登录用户(未定义的方法'会话')

Tyl*_*ler 7 session rspec ruby-on-rails omniauth ruby-on-rails-3

我正在用rspec编写功能规范,并希望每次都跳过登录步骤.用户通过omniauth(无设计)进行身份验证,并设置session[:user]变量然后引用以保持登录状态.我希望能够直接设置会话变量:

require 'spec_helper'

describe "My page" do
  it "has what I want on it when logged in" do
    user = FactoryGirl.create(:user)
    session[:user] = user.id
    visit my_path
    page.should have_content "Foobar"
  end
end
Run Code Online (Sandbox Code Playgroud)

但这给了

 Failure/Error: session[:user] = user.id
 NameError:
   undefined local variable or method `session' for #<RSpec::Core::ExampleGroup::Nested_1:0x007fd13456d170>
Run Code Online (Sandbox Code Playgroud)

有没有办法直接设置会话变量,以便我可以避免大多数测试中的登录步骤?

Tyl*_*ler 9

rack_session_access gem似乎运行良好:https: //github.com/railsware/rack_session_access

有了它,测试成为:

require 'spec_helper'

describe "My page" do
  it "has what I want on it when logged in" do
    user = FactoryGirl.create(:user)
    page.set_rack_session(user: user.id)
    visit my_path
    page.should have_content "Foobar"
  end
end
Run Code Online (Sandbox Code Playgroud)