質問: `poltergeist` gem の 1.9.0 がリリースされて、新しい `phantomjs` のサポートが入ったので、 `phantomjs` を更新してみたところ、リダイレクトを返す URL に2回目以降に `visit` したときに `page.status_code` が `200` ではなく `304` になってしまい困っています。 具体的には のような spec で のように `304` になってしまいます。 毎回 `304` になったり、 `js: false` の時も `304` になるのなら spec の方を書き換えれば良いのですが、単独で実行した時には `200` なので書き換えるわけにもいかずにどうすれば良いのか困っているのですが、どうすれば良いのでしょうか?
回答: `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` にならなくなって解決しました。 ただし、`rack_test` driver は `config.action_controller.allow_forgery_protection = false` を設定していないと問題がおこるので、`poltergeist` driver を使う時だけにする必要があり、完全に解決とはいきませんでしたが、一応解決としておきます。