Ruby
JavaScript
Rails
RSpec
Capybara

CapybaraでJSを使ったテストは save_screenshot が便利

More than 1 year has passed since last update.

概要

CapybaraでSeleniumやpoltergeistをつかってjs: trueなテストを書くときに、テストが失敗した瞬間の画面が欲しかったりする。

JavaScriptを使わないテストでは save_and_open_page と書けばその時の画面を保存してくれるが、CSSやJSが使われていない.htmlが保存されるので、レイアウトも整っていないし、テストの時に実際にどのような画面が表示されていたのか分かりにくい。

そこで save_screenshot

page.save_screenshot 'screenshot.png'

とすると、その時の画面のスクリーンショットがscreenshot.pngという名前で保存されるので便利。

rails_helper.rb
def take_screenshot
  page.save_screenshot "tmp/capybara/screenshot-#{DateTime.now}.png"
end

と追記しておくと

foo_spec.rb
it 'save screenshot' js: true do
  visit '/bar'
  take_screenshot
end

とかけるし、save_and_open_pageした時と同じディレクトリにスクリーンショットが保存されるのでさらに便利。