結論?
WEBrickを立ち上げっぱなしにして、そちらからJavaScriptとCSSをDLさせるという方法が一番しっくりきました。
RailsのテストでCSS適用のスクリーンショットを見る
注意!!
この方法を使うと、asset_hostがlocalhostじゃなくなるから、Ajaxが動かなくなるという現象にあたります。やっぱりこの方法はいけてないので、推奨しません。
以下、原文
我々はこのときをずっと待っていた。
Capybaraで保存したページのスクリーンショットはCSSが反映されてなくて、微妙だと思っていた。常々、思っていた。そこで、この問題を解決する方法はないものか?と思ってようやくググった。しかし、capybara save_and_open_page cssとかでググっても、セレクタの情報しか出てこない。当然だ。
ここで、googleさんのサジェストに救われた。
assetsという文字が出てきたのだ。srd!!と思った。
答えはここにあった。
save_and_open_page not working with capybara 2.0?
assets precompleをを実行しないといかんと。さらに、テスト用のassetsフォルダを準備することと、assets_hostを絶対パスに変更すること。なるほど。
まず、spec/spec_helper.rbを編集する。:suiteブロックに書くことで、テストのとき1度だけrake assets:precompileを実行する。
config.before :suite do %x[bundle exec rake assets:precompile] end
次に、config/environments/test.rbを編集する。最後のほうに以下を追加する。
config.assets.prefix = "assets_test" # place test assets in public/assets_test directory config.action_controller.asset_host = "file://#{::Rails.root}/public"
これで、save_and_open_pageしたときに、cssが適用されたスクリーンショットが取れるようになる。
やったね!!と思ったのだが、このままだと毎回テストを流すたびにrake assets:precompileが実行される。この処理ってすごく遅いので、ストレスになる。
そこで、save_and_open_pageをするときだけ、assetsプリコンパイルするようにすればいいと思った。
もう一度、spec/spec_helper.rbを編集する。
config.before :suite do # コメントアウトしとくか、消す # %x[bundle exec rake assets:precompile] end #...RSpec.configureブロックの外で、関数を定義する。 # save_and_open_pageは長いので、show_pageにする。 def show_page %x[bundle exec rake assets:precompile] save_and_open_page end
これでスクリーンショットを取りたいときに、show_pageを書いたら、うまく動いてくれた。
いける。これでいける。
Pingback: RailsのテストでCSS適用のスクリーンショットを見る | 自転車で通勤しましょ♪ブログ