capybara-webkitを使ったテストでsave_pageしても空のhtmlページになってしまう
###原因
はっきりとした原因は不明。
ページが空になるのはHTTPステータスコード304が返ってきた場合。
304は前回のアクセスからそのURIのリソースが更新されていないことを表すコード。
ブラウザは304が返って来た場合にはキャッシュから画面描画を行う。
一応304のレスポンスが返ってきたのに成功しているケースもあった。
デフォルトの設定ではRAILS_ENV=testのときに起こる。
これはproduction や development では csrf_meta_tags が毎回違うので 304 にならずに 200になるかららしい。
しばらく下記の解決策でやっていて設定を外してみたところテストは成功した。
変更を頻繁に行いながらテストすると起こる現象かも?
###解決策
config/environments/test.rbにリソースの更新有無を検証するためのETAGヘッダを削除する設定を追加すれば304が返ってこないため常にキャッシュを使用しなくなる。
config.middleware.delete Rack::ETag
上記方法でトークンが無いためにlink_toヘルパーメソッドにてmethod: :deleteを使ったテストが失敗する場合は以下のpoltergeistが提供するキャッシュクリアメソッドを使う。
page.driver.clear_memory_cache
###参考 https://github.com/thoughtbot/capybara-webkit/issues/724#issuecomment-248052334 http://ja.stackoverflow.com/questions/21706/phantomjs-2-0-0%E4%BB%A5%E9%99%8D%E3%81%AB%E3%81%99%E3%82%8B%E3%81%A8poltergeist%E3%81%A7status-code%E3%81%8C304%E3%81%AB%E3%81%AA%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E3%81%82%E3%82%8B