After 37signals posted how they sped up their test suite considerably by using cookies directly instead of signing a user in for every test, I wanted to do the same. Why spend more time than necessary on testing, am I right?
Unfortunately, it wasn't as easy as I thought it would be. I had to ask for help to sort this one out.
To avoid crashing all tests at once, I created an additional method, and my system helper now looks like this:
Unfortunately, it wasn't as easy as I thought it would be. I had to ask for help to sort this one out.
To avoid crashing all tests at once, I created an additional method, and my system helper now looks like this:
lang-rb # frozen_string_literal: true require "capybara/rspec" module LoginHelper def sign_in_as(user) visit sign_in_path(locale: user.locale) find_by_id("btn-accept-cookies").click if ENV["COOKIE_BANNER"] raise "No user password" unless user.password fill_in :email, with: user.email fill_in :password, with: user.password click_on I18n.t("cmd.sign_in", locale: user.locale) end def fake_sign_in_as(user) session = user.sessions.create! cookie_jar = ActionDispatch::TestRequest.create.cookie_jar cookie_jar.signed.permanent[:session_token] = { value: session.id } page.driver.with_playwright_page do |page| page.context.add_cookies([ { url: Capybara.app_host, name: "session_token", value: cookie_jar[:session_token] } ]) end user end end RSpec.configure do |config| config.include LoginHelper, type: :system end