我正在使用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
但这给出了
Failure/Error: session[:user] = user.id
NameError:
undefined local variable or method `session' for #<RSpec::Core::ExampleGroup::Nested_1:0x007fd13456d170>
有没有办法直接设置会话变量,以便在大多数测试中避免登录步骤?
答案 0 :(得分: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
答案 1 :(得分:0)
如果这是控制器规范,您可以按如下方式模拟登录:
request.session[user_id] = user.id
如How do I simulate a login with RSpec?所示。但是,由于这是一个功能规范,我不相信直接设置会话。