発生した問題
RSpecでsystem specを実行すると以下のようなエラーが出る。
OpenSSL::SSL::SSLError:
SSL_connect returned=1 errno=0 state=error: certificate verify failed (unable to get local issuer certificate)
開発環境
- Rails 6.0.6.1
- Ruby 2.7.7
- rspec-rails 5.1.2
- webdrivers 5.3.1
- selenium-webdriver 4.9.0
- capybara 3.39.2
前提
下記の記事によるとRuby,Railsのバージョンを上げて、selenium-webdriverの最新バージョンを使うのが正攻法のようです。
https://qiita.com/jnchito/items/f994dd3ac2cdc39bff8c
ですが今回は、受講している講座のバージョンに合わせたいため、バージョンを変えずに解決していきます。
解決のために行ったこと
原因の推測
RubyがSSLをうまく認識できていない。
Rubyで開発する場合によく出るエラーの一つみたい。
やったこと
下記記事を参照し、config/application.rb
に回避のためのコードを記載
rspec実行時 OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=error: certificate verify failed (unable to get local issuer certificate)
if Rails.env.test?
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
end
結果
OpenSSL::SSL::SSLError:
が出なくなる
注意点として、本番環境でこれをやるとセキュリティリスクが高まるので絶対にやらないこと。
本来はちゃんとSSLを取得して適切なところに配置するのが良いみたいですが、今回はテストさえできればいいので簡単に回避できる方法を取りました。
ただ、SSL認証エラーは解消しましたが、Google Chromeが立ち上がらないという別のエラーが発生しました。。。
こちらの解消については長くなってしまうので別記事にまとめます。