Help us understand the problem. What is going on with this article?

【Rails】RSpecのSystem Test実行前に前回テスト時のScreenshotを削除しておく

More than 1 year has passed since last update.

Abstract

RSpec3.8以降のSystem Testは特に気にせずともテストNG時にscreenshotを保存してくれる。
とても便利なのだけど、ほっておくとscreenshotがいっぱいになり、いざ今回のテストで失敗した箇所を探そうとしても埋もれてしまうことがある。

いちいちrmを打ってからrspecするのも面倒なので、
今回は、RailsでRSpecを実行する時に、前回までのscreenshotを自動で削除するようにするメモ。

ベースアプリは --> Rails on Docker(alpine)でdocker-seleniumを使わないでSelenium+RSpec+Capybaraでテスト自動化してみる - Qiita

注意事項

1回ファイルパスを間違えて、rspec実行したら全てのファイルが消えた、という事件が起きたので注意してください...gitから戻せたのでよかったですが...

FileUtilsを使う

RubyのライブラリにFileUtilsがある。 --> module FileUtils
これはファイルを操作するためのライブラリ。その中にrm_rfというのがあるのでこれを使います。linux commandのrm -rfですね。ファイルまたはディレクトリを再起的に削除してくれます。

これを、rails_helper.rbに記載してきます。

spec/rails_helper.rb
RSpec.configure do |config|
  # テスト実行前に前回テストのscreenshotをディレクトリごと削除する
  config.before(:all) do
    FileUtils.rm_rf(Rails.root.join('tmp', 'screenshots'), secure: true)
  end
end

RSpecのSystem Testではtmp/screenshots/以下にscreenshotが生成されていくので、そのディレクトリごと削除する設定です。ディレクトリは残したい場合は、

spec/rails_helper.rb
RSpec.configure do |config|
  # テスト実行前に前回テストのscreenshotを削除する
  config.before(:all) do
    FileUtils.rm_rf(Dir[Rails.root.join('tmp', 'screenshots', '*')], secure: true)
  end
end

と指定してあげればOKです。

Conclusion

rspec前に毎回rmする煩わしさから解放されました。

Reference

at-946
昨日の自分に向けて、つまづいたことや困ったことをメモってます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away