Note

Cuprite の driven_by と register_driver の違い

※この記事はClaudeCodeを利用して実装した際にハマったことを、ClaudeCodeにブログ記事を書いてもらっています。

問題

spec/support/capybara.rbCapybara.register_driver を使って Cuprite の設定を行っても、実際のテスト実行時に設定が反映されないこ とがありました。

# spec/support/capybara.rb Capybara.register_driver(:cuprite) do |app| Capybara::Cuprite::Driver.new( app, browser_path: '/usr/bin/chromium', process_timeout: 120, timeout: 120 ) end

しかし、テストを実行すると ProcessTimeoutError: Browser did not produce websocket url within 10 seconds というエラーが発生しました 。設定した 120 秒ではなく、デフォルトの 10 秒でタイムアウトしていたのです。

原因

rails_helper.rbdriven_by(:cuprite) を呼び出すと、Capybara.register_driver で定義したドライバーの設定が無視され、デフォルト 設定が使用されることがあります。

解決方法

driven_by メソッドに直接オプションを渡すことで、確実に設定を反映させることができます。

# spec/rails_helper.rb RSpec.configure do |config| config.before(:each, type: :system) do driven_by(:cuprite, options: { browser_path: '/usr/bin/chromium', headless: true, browser_options: { 'no-sandbox': nil, 'disable-gpu': nil, 'disable-dev-shm-usage': nil }, process_timeout: 120, timeout: 120 }) end end

教訓

  • Capybara.register_driverdriven_by は独立した設定メカニズム
  • driven_by に直接オプションを渡す方が確実
  • タイムアウト値がデフォルトのままの場合は、設定が反映されていない可能性を疑う