|
1 | 1 | # frozen_string_literal: true
|
2 | 2 |
|
3 | 3 | require "test_helper"
|
4 |
| -require "capybara/cuprite" |
| 4 | +require "capybara-playwright-driver" |
5 | 5 |
|
6 |
| -# Capybara setup fom Evil Martians |
7 |
| -# SEE: https://evilmartians.com/chronicles/system-of-a-test-setting-up-end-to-end-rails-testing |
8 |
| -# NOTE: Will need to set this up for multiple sessions |
9 |
| -Capybara.default_max_wait_time = 2 |
10 |
| -Capybara.default_normalize_ws = true |
11 |
| -# Capybara.save_path = ENV.fetch("CAPYBARA_ARTIFACTS", "./tmp/capybara") |
12 |
| - |
13 |
| -class ApplicationSystemTestCase < ActionDispatch::SystemTestCase |
14 |
| - driven_by :cuprite, using: :headless_chrome, screen_size: [1400, 1400] |
| 6 | +class CapybaraNullDriver < Capybara::Driver::Base |
| 7 | + def needs_server? |
| 8 | + true |
| 9 | + end |
15 | 10 | end
|
16 | 11 |
|
| 12 | +Capybara.register_driver(:null) { CapybaraNullDriver.new } |
| 13 | +Capybara.default_driver = :null |
| 14 | +Capybara.default_max_wait_time = 12 |
| 15 | +Capybara.default_normalize_ws = true |
| 16 | +Capybara.save_path = "tmp/capybara" |
17 | 17 | Capybara.configure do |config|
|
18 | 18 | config.server = :puma, {Silent: true}
|
19 | 19 | end
|
| 20 | + |
| 21 | +class ApplicationSystemTestCase < ActionDispatch::SystemTestCase |
| 22 | + driven_by :null |
| 23 | + |
| 24 | + def self.playwright |
| 25 | + @playwright ||= Playwright.create(playwright_cli_executable_path: Rails.root.join("../../node_modules/.bin/playwright")) |
| 26 | + end |
| 27 | + |
| 28 | + alias_method :orig_page, :page |
| 29 | + attr_reader :playwright_browser, :playwright_page |
| 30 | + alias_method :page, :playwright_page |
| 31 | + |
| 32 | + def js(...) |
| 33 | + page.evaluate(...) |
| 34 | + end |
| 35 | + |
| 36 | + def before_setup |
| 37 | + super |
| 38 | + base_url = Capybara.current_session.server.base_url |
| 39 | + @playwright_browser = self.class.playwright.playwright.chromium.launch(headless: true) |
| 40 | + @playwright_page = @playwright_browser.new_page(baseURL: base_url) |
| 41 | + playwright_page.set_default_timeout Capybara.default_max_wait_time * 1_000 |
| 42 | + end |
| 43 | + |
| 44 | + def after_teardown |
| 45 | + super |
| 46 | + playwright_browser&.close |
| 47 | + end |
| 48 | +end |
0 commit comments