SeleniumWebDriverでブラウザのconsoleの出力を取得することでRubyだけでCORSのテストをする
Rails + rack-corsの設定をRSpecだけである程度お手軽にテストする - あーありがち(2019-06-01) の完成版とも言える。
できたこと
- rack middleware の設定をサーバサイドフレームワークから独立させることでテスト用の rack アプリで再利用
- Capybara の機能ではなく Thread と rack handler を使ってテスト目的のサーバを自由にいくつでも起動する
- Capybara にはアクセス先の URI だけ教える
- Selenium::WebDriver から browser の中を探っていくと log の interface がある driver もある
- 2019-09-01 時点で ChromeDriver でしか確認できていない。GeckoDriver では動かなかった
地味に 1 の設定を独立させる、つまり rack middleware に与える block を別な場所に分離するのが面倒だった。
3 は Capybara が古いとダメ。確認できたのは 3.x 系。(selenium/CHANGES at master · SeleniumHQ/selenium によると 2013年の 2.38 で beta API として登場しているが、公式になったのかどうかよく分からない。)
期待できること
- 単純に console の出力を取得できるのでレガシーな JavaScript のテストにも使える
- 本物のサーバサイドアプリからも本物のクライアントサイドアプリからも独立してインターフェイスをテストすることはまだまだできる