TIM Labs

RSpecで特定のテストケースのみを実行する方法

| コメント(0) | トラックバック(0)

RSpecでテストを書いていると、特定のSpecの、特定のテストケースのみを実行したい場合があります。

プロジェクト初期のうちはSpecも少なく、全てのテストケースを実行していても気にならないかもしれません。 しかし、プロジェクトが進むに連れて、Specファイルがどんどん膨れ上がっていきます。 そんなSpecに新しいテストケースを追加して実行なんてしようものなら、まあテストに時間がかかって、イライラします。 全体テストなんてJenkinsにやらせればいいんです。私は今追加したテストケースだけをテストしたいんです。

RSpecには、特定のテストケースのみを実行する機能が備わっています。

例えば、次のようなspec(ファイル名:spec/test.spec)があるとします。

  1  describe "#ほにゃらら" do
  2    it "ケースAの場合はxxxとなること" do
  3      ...
  4    end
  5
  6    it "ケースBの場合はxxxとなること" do
  7       ...
  8    end
  9  end

RSpecは、以下のように行数を指定して実行をすることができます。

  rspec spec/test.spec:7

上記コマンドで、test.specファイルの7行目にあるテストケースを実行することができます。 つまり、「ケースBの場合はxxxとなること」だけを実行できるわけです。

「今時わざわざコンソールからrspecなんて入力してテスト実行しないよ、Guard + Sporkで自動テストを走らせてるよ!」

そんな方は、RSpecのfilter_runを利用すると幸せになります。

filter runを利用するためには、あらかじめ spec/spec_helper.rb に、下記のような設定を加えて置く必要があります。

  RSpec.configure do |config|
    config.filter_run :focus => true
    config.run_all_when_everything_filtered = true
  end

spec側に :focus => true と記述すると、特定のspecのみ実行できます。

  describe "#ほにゃらら" do
    it "ケースAの場合はxxxとなること" do
      ...
    end

    it "ケースBの場合はxxxとなること", :focus => true do
      ...
    end
  end

上記のように設定すると、guardでも「ケースBの場合はxxxとなること」だけが走るようになります。 focus => trueは、describe, context, it に利用することができます。例えば、次のようにdescribeにも設定可能です。

  describe "既存のテストケース" do
    it "xxx"
    it "xxx"
  end

  describe "新しく追加するテストケース", :focus => true do
    it "xxxとなること" do
    end
  end

これで余計なテストが走らなくなり、今書いているテストだけを何回も実行できますね。

テストを書き終わったら、:focus => trueを外すのを忘れずに!私はよく忘れます。

トラックバック(0)

トラックバックURL: http://labs.timedia.co.jp/mt/mt-tb.cgi/371

コメントする

このブログ記事について

このページは、nishioが2013年3月13日 17:22に書いたブログ記事です。

ひとつ前のブログ記事は「Vim プラグイン開発でもユニットテストがしたい! (vim-vspec 編)」です。

次のブログ記事は「WEB+DB PRESS plus シリーズ最新刊「開発ツール徹底攻略」に Vim の記事を寄稿しました」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。