3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

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

3
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?