問題
Railsのfeature specでのステータスコードの検証の箇所にて、今まで200を返していたのに急に304を返す様になりました。
社内で相談したところ、PhamtomJSのバージョンアップしたとかない?と言われたので、調べたら、どうもそれが原因のようでした。
かといって、バージョンを古いまま固定するのも嫌なので、新しいバージョンでも200を返すようにする方法を調べました。
同じ内容で困っていた方の投稿を見つけました。
phantomjs 2.0.0以降にするとpoltergeistでstatus_codeが304になることがある
phantomjs 2.1.1 では 1.9.8 では送信されなかった If-None-Match が送信されるようになっていて、Rack::ConditionalGet と Rack::ETag で 304 Not Modified になっていたようです。
test environments だけ 304 になるので、もう少し調べてみたところ、production や development では csrf_meta_tags が毎回違うので 304 にならずに 200 になっていました。
そこで config/environments/test.rb で config.action_controller.allow_forgery_protection = false と設定されているのをコメントアウトしたところ、304 にならなくなって解決しました。
ということのようです。が、しかし、この設定にすると、link_to
ヘルパーメソッドでmethod: :delete
を使っているところが動かなくなり、他のテストが落ちまくりました。
対処法
poltergeistに、ページキャッシュをクリアするメソッドが追加されていました。
それを使うと、キャッシュがないため304を返さず、再び200を返すようになります。
page.driver.clear_memory_cache
再度ページにアクセスする直前にこのメソッドを実行しましょう。