2017-11-19 01:46:20 +0900
rspec 3.7でOmniAuthのテストモードが失敗するようになった場合の対策。
rspec (rspec-rails) を3.7.xにアップデートしてから、Integration Testing · omniauth/omniauth Wikiにあるような OmniAuth.config.test_mode
を使ったFeature specが失敗するようになってしまった場合は、Pumaがclusters modeで動作するように設定されていないか見直すこと。
具体的には、config/puma.rb
がHerokuの推奨する以下のような設定になっていると、
workers Integer(ENV['WEB_CONCURRENCY'] || 2)
テスト時にOmniAuthのモックがうまく設定されない状態でテストが実行されてしまうようになる。
これを、
if ENV.fetch('RAILS_ENV') { 'development' } == 'test'
workers 0
else
workers Integer(ENV['WEB_CONCURRENCY'] || 2)
end
のようにしてclusters modeでは動作しないようにした状態でテストを実行すると、おそらく従来通りの結果が得られる。
他にも VCR.use_cassette '...' { ... }
のようにVCRで囲んだ部分でもリクエストをフックしてモックデータを返すような動作をしなくなるなど、clusters modeにしていることによってハマることがある。