Sooey

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.rbHerokuの推奨する以下のような設定になっていると、

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にしていることによってハマることがある。