21941


`poltergeist` gem の 1.9.0 がリリースされて、新しい `phantomjs` のサポートが入ったので、 `phantomjs`
を更新してみたところ、リダイレクトを返す URL に2回目以降に `visit` したときに `page.status_code` が `200` ではなく
`304` になってしまい困っています。

具体的には <https://github.com/znz/test304/blob/master/spec/features/home_spec.rb>
のような spec で <https://github.com/znz/test304#result-with-phantomjs-200-211>
のように `304` になってしまいます。

毎回 `304` になったり、 `js: false` の時も `304` になるのなら spec の方を書き換えれば良いのですが、単独で実行した時には
`200` なので書き換えるわけにもいかずにどうすれば良いのか困っているのですが、どうすれば良いのでしょうか?


CC BY-SA 3.0
2016-02-04T10:24:48.323
21706
2017-02-08T00:21:48.190
14277
question
ruby-on-rails rspec capybara phantomjs poltergeist
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` にならなくなって解決しました。

ただし、`rack_test` driver は `config.action_controller.allow_forgery_protection =
false` を設定していないと問題がおこるので、`poltergeist` driver
を使う時だけにする必要があり、完全に解決とはいきませんでしたが、一応解決としておきます。


CC BY-SA 3.0
2016-02-10T09:12:08.607
21941
2016-02-10T09:12:08.607
14277
21706
answer


`config/environments/test.rb`の`config.action_controller.allow_forgery_protection
= false`をコメントアウトすると、`link_to`ヘルパーメソッドにて`method:
:delete`などを使っているところのテストが軒並み動かなくなりました。トークンがないからエラー扱いになるようです。

poltergeistのほうで、ページキャッシュをクリアするメソッドが提供されるようになったので、再度アクセスする前にページキャッシュをクリアするほうがよさそうです。  
<https://github.com/teampoltergeist/poltergeist/pull/767>

使い方は、`page.driver.clear_memory_cache`です。


CC BY-SA 3.0
2017-02-08T00:21:48.190
32475
2017-02-08T00:21:48.190
20557
21706
answer