test-unit の test-unit-runner-tap を使って Test Anything Protocol (TAP) 出力をおこなわせる備忘録です。
bundler で sample gem を作ります。
$ gem install bundler $ bundle gem sample --test minitest --mit $ cd sample
GEM テンプレート sample.gemspec に test-unit と test-unit-runner-tap を指定しておきます。
# 途中略 Gem::Specification.new do |spec| # 途中略 spec.add_development_dependency "bundler", "~> 1.17" spec.add_development_dependency "rake", "~> 12.3" spec.add_development_dependency "test-unit", "~> 3.2" spec.add_development_dependency "test-unit-runner-tap", "~> 1.1" end
test/test_helper.rb を minitest から test-unit 用へ変更します。
$LOAD_PATH.unshift File.expand_path("../../lib", __FILE__) require "sample" require "test/unit" require "test/unit/runner/tap"
test/sample_test.rb も test-unit 用へ書き換えます。
require "test_helper" class SampleTest < Test::Unit::TestCase test "it has a version number" do assert { ::Sample.const_defined?(:VERSION) && ! ::Sample::VERSION.nil? } end test "it does something useful" do assert true end end
Rakefile の test タスクに TAP で出力するようにテスト・オプションを options に指定します。 コメント記載のように、 オプションの引数の前を等号にしないと正しく認識しなくなります。
ところで、 これの執筆時点での test-unit-3.2.9 はブロック引数とローカル・スコープで同じ変数名を使っているとの警告が出ます。 とりあえずの対応として ruby の警告表示をしないように warning を偽にしておきます。
require "bundler/gem_tasks" require "rake/testtask" Rake::TestTask.new(:test) do |t| t.libs << "test" t.libs << "lib" t.test_files = FileList["test/**/*_test.rb"] t.options = "--runner=tap" # うっかり "--runner tap" と書かないこと t.warning = false # test-unit-3.2.9 の警告潰し end task :default => :test
gem をインストールします。
$ bundle install --path=vendor/bundle
これで準備が終わりました。 TAP 出力になっているかどうか試してみます。
$ rake test 1..2 ok 1 - test: it does something useful(SampleTest) ok 2 - test: it has a version number(SampleTest) # Finished in 0.045080187 seconds. # 2 tests, 2 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications