CONTENTS
APPENDIX
ENVIRONMENTS
- Ruby : 2.6.2
filewatcher のインストール
ファイルの変更によってテストを実行したい。
以前は guard
を使用していたが、 guard-minitest
がメンテナンスされていないので代わりのものを探した。
検索したら filewatcher がすぐ出てきて操作も簡単なので、他は見ていないがこれを選択することにした。
# Gemfile gem "filewatcher"
以下のコマンドで自動テストが実行できる。
$ filewatcher 'test/**/*_test.rb' 'ruby -Ilib:test $FILENAME'
rake タスクの定義
rake タスクとして定義することで実行するコマンドをファイル名から構築できるようになる。
以下のようなタスクを定義すると rake watch
で自動テストが開始する。
task :watch do require "filewatcher" Filewatcher.new(["test/**/*_test.rb"]).watch do |filename,event| ruby "-Ilib:test #{filename}" end end
まとめ
Ruby で自動テストを行う方法をまとめた。 簡単なコマンドで実現できて満足。
参考資料
Rakefile
実際に使用している Rakefile を載せておく。
test だけではなく lib も監視して、対応するテストが書いてあれば実行するという構成にしてある。
require "rake/testtask" Rake::TestTask.new do |test| test.pattern = "test/**/*_test.rb" end task :watch do require "filewatcher" Filewatcher.new(["test/**/*_test.rb","lib/**/*.rb"]).watch do |filename,event| relative = filename.split(Dir.pwd).last if relative.start_with?("/lib/") filename = File.join [Dir.pwd, relative.gsub(%r{^/lib/},"test/").gsub(%r{\.rb},"_test.rb")] end if File.exist?(filename) begin ruby "-Ilib:test #{filename}" rescue end end end end