22 Mar 2014, 09:40

RSpecのテスト結果をCSVで出力する

テスト項目表をExcelで作成する必要がある。

RSpecの実行結果をExcelにコピペするための楽な方法を考えてみたメモです。

RSpecのカスタムフォーマット

RSpecには、カスタムフォーマットという機能がある。

出力のフォーマットを自分でカスタマイズするための拡張ボイント。

この機能を利用して、CSVフォーマットでテスト結果を出力してみる。

前提条件

テスト項目表には、最低限以下のような項目を書く必要があると仮定する。

  • テスト番号
  • 大項目
  • 中項目
  • 小項目
  • 期待結果
  • 実施日

これらをRSpecのテストコードに埋め込む。

実装

メタデータをspecに埋め込む

<div class="outline-text-3" id="text-3-1">
  <p>
    RSpecのメタデータに、項目の情報を残す。デフォルトのメタデータは以下で見ることができる。
  </p>

  <pre><code>

it “テストです” do # すべての要素をみる example.metadata

# 特定の項目を見る
example.metadata[:description_args]

end

  <p>
    自分でメタデータを定義するには、 it &#8221; &#8220;, のあとに ハッシュ形式で書く。
  </p>

  <pre><code>

it “ほげほげであること” , :no => “1”, :date => “2014/03/22” do end

フォーマットスクリプトを作成する

<div class="outline-text-3" id="text-3-2">
  <p>
    フォーマットスクリプトは、デフォルトのフォーマッタを継承して作成する。
  </p>

  <p>
    必要なメソッドのみをカスタマイズする。
  </p>

  <ul class="org-ul">
    <li>
      initialise(output) はじめに呼ばれる
    </li>
    <li>
      example_started(example) サンプル開始時に呼ばれる
    </li>
    <li>
      example_passed(example) テスト成功時に呼ばれる
    </li>
    <li>
      example_passed(example) テスト失敗時に呼ばれる
    </li>
    <li>
      close() 最後に呼ばれる
    </li>
  </ul>

  <p>
    ほかにも、いろいろとメソッドがあるので、公式のドキュメント参照。
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://rubydoc.info/gems/rspec-core/2.6.4/RSpec/Core/Formatters/DocumentationFormatter">Class: RSpec::Core::Formatters::DocumentationFormatter — Documentation for rspec-core (2.6.4)</a>
    </li>
  </ul>

  <p>
    今回は、Documentationフォーマットを継承する。
  </p>

  <pre><code>

def initialize(output) super(output) @results = Array.new end

def example_passed(example) super(example) result = createResult(example) result[:result] = “OK” @results << result end

def example_failed(example) super(example) result = createResult(example) result[:result] = “NG” @results << result end

def close output_csv() end

コマンド実行

<div class="outline-text-3" id="text-3-3">
  <p>
    コンソールから以下を叩く。
  </p>

  <pre><code>

rspec -I ../ -I . -r csv_formatter.rb csv_format_spec.rb -f CsvFormatter

  <p>
    -f のあとに自分がつくったフォーマッタのクラス名を渡す。
  </p>

  <p>
    -r のあとに自分がつくったスクリプトを渡す。
  </p></p>
</div></p>

コード