下記のような 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の作者からメンション頂きました!
@murajun1978 @netwillnet regexp works on both unit & spec: ruby test.rb -n /hoge/
— Seattle.rbさん (@seattlerb) 2013年2月21日
ということで、正規表現が使えるそうです。
ruby test.rb -n /hoge/
試したところ、正規表現にマッチするテストが全部実行されるみたいですね。べんり!