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
に記載してきます。
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が生成されていくので、そのディレクトリごと削除する設定です。ディレクトリは残したい場合は、
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する煩わしさから解放されました。