Trouble
There are some cases when you may need to access application session in your tests:
- User signup or registration flow is too long.
- Application use another backend and store result into session.
Access to session and request is not possible from the test ...And it’s true :)
Rescue
So is it actually possible to access session? Actually yes :)Instead of trying to hack capybara you may just extend your application in test environment! Just add some code that modify session according to given request parameters.If you use rack based application then your are lucky – try rack_session_access gem.If it’s another application you need implement concept yourself :)This gem should work with any rack application. We covered it with acceptance testing against:- rack builder application
- sinatra application
- rails3 application
Usage
$ gem install rack_session_accessSee README for usage examples.
Rails + Rspec + Capybara example
Add to spec/spec_helper.rb:require 'capybara/rspec'
require 'rack_session_access/capybara'
Rails.application.config do
config.middleware.use RackSessionAccess::Middleware
end
And use set_rack_session helper in acceptance test:require 'spec_helper'
feature "My feature" do
background do
@user = Factory(:user)
end
scenario "logged in user goes to profile page" do
# read your authorization engine manual how it store user into session
page.set_rack_session(:user_id => @user.id)
page.visit '/profile'
...
end
end