Rubyトラックでのテスト

ExercismでRubyの演習をテストする方法を学びましょう


テストの実行

テストは次のコマンドで実行します。

$ ruby hamming_test.rb

最初のテストだけが実行され、残りはすべてskipメソッドで保留にされています。テストが1つ通るたびに、次のskipを削除するかコメントアウトしましょう。

skipについて

skipメソッドは、テストスイートにそのテストを実行しないよう指示します。これは、まだ実装していない機能のテストを実行しないようにして、今取り組んでいる部分に集中するためによく使われます。

テスト実行のサマリーには、スキップされたテストの数が一覧で表示されます。演習を終える前に、すべてのskipを無効にしておきましょう。

テスト結果の表示をカスタマイズする

色を付けたい場合は、次のコマンドでテストを実行します。

$ ruby hamming_test.rb -p

テスト名を表示したい場合は、次のコマンドでテストを実行します。

$ ruby hamming_tests.rb -v

1つのテストだけを実行したい場合は、正規表現スタイルのマッチングで1つ、またはグループを指定できます。

$ ruby hamming_tests.rb -n /empty/

オプションを組み合わせることもできます。

すべてのskipを無効にする

実行したい個々のテストやテストのグループを選べるようになったので、すべてのskipを無効にしたくなるかもしれません。

手っ取り早い方法

Rubyではメソッドを上書きできるという性質を利用して、次のコード行を追加するとします。

def skip ; end

これをハミングのテストファイルで次のように書きます。

class HammingTest < Minitest::Test
  def skip ; end
  def test_identical_strands

そうすると、すべてのskipはそのまま評価されつつ、テストは実行されるようになります。

もう少しすっきりした方法

もちろん、その都度すべてのファイルを編集するのは面倒です。そこで、演習を作るときに私たちがしたように、skipの定義を書いたファイルを作り、必要なときにそれをライブラリとして読み込むという手があります。

私たちは「ヘルパー」的なものを入れておくlibフォルダーを作りました。その中身は次のようになっています。

require 'minitest/autorun'
# You can use this to disable all skips in the current exercise by issuing the
# following command:
#     ruby -I../lib -rdisable_skip <filename_test.rb>

module Minitest
  class Test
    def skip(_msg='', _bt=caller)
    end
  end
end

使い方の説明はこのファイルの内容の中にコメントとして書かれていて、ファイルの内容は完成した状態のものです。