LoginSignup
2
3

More than 5 years have passed since last update.

poltergeistでステータスコードが304が返ってくる場合の対処法

Posted at

問題

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

再度ページにアクセスする直前にこのメソッドを実行しましょう。

参考ページ

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3