Trouble

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 ...

Rescue

rack builder application

sinatra application

rails3 application

Usage

$ gem install rack_session_access

Rails + Rspec + Capybara example

require 'capybara/rspec' require 'rack_session_access/capybara' Rails.application.config do config.middleware.use RackSessionAccess::Middleware end

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

Conclusion

References

There are some cases when you may need to access application session in your tests:In each story you must repeat the same steps. You can actually use some shared code but it does not speed-up tests anyway.Nowadays if you want to access session in cucumber/capybara acceptance test you are in trouble.Capybara’ README says:And it’s true :)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:See README for usage examples.Add to spec/spec_helper.rb:And usehelper in acceptance test:Enjoy faster testing!