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