valid,invalid

関心を持てる事柄について

JavaScript が動作する Capybara の feature spec でブラウザのコンソールを確認する

結論

page.driver.browser.manage.logs.get(:browser)

調べた経緯

フォームの text input に対する fill が働かないのでどうしたかと思い、Selenium で操作中のブラウザをのぞいてみると React の component が一切 render されていなかった。

どこかで JavaScript の error が起きているだろうとと思ったがブラウザの console を確認する方法がわからず調べた。

visit 直後に binding.pry を張り、このワンライナーで確認したところたしかに js error で死んでいた。csrf_meta_tag で生成される meta tag から CSRF token を js 側から取り出そうとしているが、そもそもその要素が DOM tree 内に存在せずにエラーになる、というものだった。

たしかにテスト時の環境では CSRF チェックを無効にするよう config/environments/test.rb で以下のように設定しているのでわかればどうということはない問題だった。

# config/environments/test.rb
config.action_controller.allow_forgery_protection = false

しかし、直接の原因はクライアントサイドの js にあっても RSpec の failure message 上は Element Not Found で失敗しているので何が起きているか突き止めるのに結構悩んでしまった。

環境


(追記)

記事を書いた後に見つけたのだが、以下の記事では SEVERE レベルの js error が起きた場合にテストを fail させる方法を紹介している。これは良いかも。

medium.com