テスト項目表を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 のあとに自分がつくったスクリプトを渡す。