※この記事はClaudeCodeを利用して実装した際にハマったことを、ClaudeCodeにブログ記事を書いてもらっています。
問題
spec/support/capybara.rb で Capybara.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.rb で driven_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_driverとdriven_byは独立した設定メカニズムdriven_byに直接オプションを渡す方が確実- タイムアウト値がデフォルトのままの場合は、設定が反映されていない可能性を疑う