げっとシステムログ

WEB開発メモ

Ruby で自動テスト

CONTENTS
  1. filewatcher のインストール
  2. rake タスクの定義
  3. まとめ
  4. 参考資料
APPENDIX
  1. Rakefile
ENVIRONMENTS
  • Ruby : 2.6.2

filewatcher のインストール

ファイルの変更によってテストを実行したい。 以前は guard を使用していたが、 guard-minitest がメンテナンスされていないので代わりのものを探した。

検索したら filewatcher がすぐ出てきて操作も簡単なので、他は見ていないがこれを選択することにした。

# Gemfile
gem "filewatcher"

以下のコマンドで自動テストが実行できる。

$ filewatcher 'test/**/*_test.rb' 'ruby -Ilib:test $FILENAME'

TOP

rake タスクの定義

rake タスクとして定義することで実行するコマンドをファイル名から構築できるようになる。

以下のようなタスクを定義すると rake watch で自動テストが開始する。

task :watch do
  require "filewatcher"
  Filewatcher.new(["test/**/*_test.rb"]).watch do |filename,event|
    ruby "-Ilib:test #{filename}"
  end
end

TOP

まとめ

Ruby で自動テストを行う方法をまとめた。 簡単なコマンドで実現できて満足。

TOP

参考資料

TOP

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

TOP