Help us understand the problem. What is going on with this article?

Minitestで特定のテストをスキップする方法

More than 1 year has passed since last update.

はじめに

この記事は書籍「プロを目指す人のためのRuby入門」に掲載できなかったトピックを著者自らが紹介するアドベントカレンダーの5日目です。
本文に出てくる章番号や項番号は書籍の中で使われている番号です。

今回はMinitestで特定のテストをスキップする方法を説明します。

必要な前提知識

「プロを目指す人のためのRuby入門」の第3章まで読み終わっていること。

Minitestで特定のテストをスキップする方法

使用頻度はあまり高くないと思いますが、何らかの理由で対応を後回しにしたい場合はテストの実行を途中で停止してスキップすることができます。テストをスキップする場合は次のようにskipメソッドを使います。

def test_sample
  skip '以下の問題はあとで修正する'
  assert_equal 'RUBY', nil.upcase
end

これを実行すると次のような結果になります。

$ ruby sample_test.rb
Run options: --seed 42317

# Running:

S

Finished in 0.000945s, 1058.4788 runs/s, 0.0000 assertions/s.

1 runs, 0 assertions, 0 failures, 0 errors, 1 skips

You have skipped tests. Run with --verbose for details.

テストの進捗状況はスキップ(Skip)を表すSが表示されます。実行結果のまとめでも1 skipsのようにスキップされたテストの件数が表示されています。

最後の1行には英語で「スキップされたテストがあります。--verboseオプションを付けて実行すると詳細が表示されます」という文言が書いてあります。このメッセージに従って、--verbose(冗長の意)オプションを付けて実行してみましょう。

$ ruby sample_test.rb --verbose
Run options: --verbose --seed 1520

# Running:

SampleTest#test_sample = 0.00 s = S

Finished in 0.001041s, 960.6333 runs/s, 0.0000 assertions/s.

  1) Skipped:
SampleTest#test_sample [sample_test.rb:6]:
以下の問題はあとで修正する

1 runs, 0 assertions, 0 failures, 0 errors, 1 skips

--verboseオプション付きで実行すると、スキップされたテストの場所とskipメソッドに渡したメッセージが表示されるようになります。(進捗状況の表示内容も変わっていますね)

テストがスキップされるとそのテストメソッドの実行はそこで終わります。実行対象のテストクラスやテストメソッドが複数あった場合は次のテストクラスやテストメソッドの実行に移ります。

とはいえ、skipメソッドを多用しすぎると、スキップされるテストだらけになってほとんど何もテストできていない、ということも起こりえるので、「どうしても」という状況以外では使用しないようにしましょう。

次回予告

次回はテストメソッドの粒度について説明します。

jnchito
SIer、社内SEを経て、ソニックガーデンに合流したプログラマ。 「プロを目指す人のためのRuby入門」の著者。 http://gihyo.jp/book/2017/978-4-7741-9397-7 および「Everyday Rails - RSpecによるRailsテスト入門」の翻訳者。 https://leanpub.com/everydayrailsrspec-jp
https://blog.jnito.com/
sonicgarden
「お客様に無駄遣いをさせない受託開発」と「習慣を変えるソフトウェアのサービス」に取り組んでいるソフトウェア企業
http://www.sonicgarden.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした