おもしろwebサービス開発日記

Ruby や Rails を中心に、web技術について書いています

minitest/spec で指定のテストだけを実行する

下記のような minitest で書かれたテストがあるとします。

# test.rb
require 'minitest/autorun'

class TestHoge < MiniTest::Unit::TestCase
  def test_hoge
    assert_equal "hoge", "hoge"
  end

  def test_fuga
    assert_equal "fuga", "fuga"
  end
end

test_hoge だけをテストしたい場合は下記のように

ruby test.rb -n test_hoge

のように-n 実行したいテスト名をつけてテストを実行します。

では下記のように、minitest/spec を利用して書かれたテストのうち、'hoge' の方だけテストしたい場合はどのように書いたら良いでしょうか。

require 'minitest/autorun'

describe 'test hoge' do
  it 'hoge' do
    'hoge'.must_equal 'hoge'
  end

  it 'fuga' do
    'fuga'.must_equal 'fuga'
  end
end

下記のように書きます。

ruby test.rb -n test_0001_hoge

minitest/spec を使った場合、テストの名前は "test_四桁の数値_itに渡した文字列" のようになります。数値は「一番内側のdescribeの中で何番目に呼ばれたか」を四桁で表したものです。

turn を使うと下記のような出力でテストの名前を表示してくれるので、それで確認した方がわかりやすいかもしれませんね。

ruby test.rb

Loaded Suite 

Started at 2013-02-21 20:27:05 +0900 w/ seed 32450.

test hoge
     PASS (0:00:00.000) test_0002_fuga
     PASS (0:00:00.000) test_0001_hoge

Finished in 0.000435 seconds.

2 tests, 2 passed, 0 failures, 0 errors, 0 skips, 2 assertions

追記

minitestの作者からメンション頂きました!

ということで、正規表現が使えるそうです。

ruby test.rb -n /hoge/

試したところ、正規表現にマッチするテストが全部実行されるみたいですね。べんり!