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

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

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

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

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

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

前提条件

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

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

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

実装

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

RSpecのメタデータに、項目の情報を残す。デフォルトのメタデータは以下で見ることができる。

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

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

自分でメタデータを定義するには、 it " “, のあとに ハッシュ形式で書く。

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

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

フォーマットスクリプトは、デフォルトのフォーマッタを継承して作成する。

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

  • initialise(output) はじめに呼ばれる
  • example_started(example) サンプル開始時に呼ばれる
  • example_passed(example) テスト成功時に呼ばれる
  • example_passed(example) テスト失敗時に呼ばれる
  • close() 最後に呼ばれる

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

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

  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

コマンド実行

コンソールから以下を叩く。

rspec -I ../ -I . -r csv_formatter.rb csv_format_spec.rb -f CsvFormatter
  • -f のあとに自分がつくったフォーマッタのクラス名を渡す。
  • -r のあとに自分がつくったスクリプトを渡す。