RSpecのexampleの情報を取得する

capybaraを使用してRSpecでテストを実行するようになるとスクリーンショットを結構な枚数保存します。何せ簡単に取得できることと、エラーとなった場合の情報が欲しいためです。

ただ、ここで面倒なのがスクリーンショットのファイル名です。いちいち連番で管理するのも面倒ですし、何より設定を行うのは手間です。スクリーンショットの名称をテストの名称とできれば手間が減りそうです。

具体的には、

  1. 画面を表示直後に表示内容を保存する。
  2. ボタンなどを実行後に表示内容を保存する。

程度で保存できればJenkinsでテストが失敗した場合もトレースしやすそうです。

RSpecのexample名称を取得する

さて、上記の通りある程度ファイル名などを実行しているコンテキストから取得するためにはに関する情報をRSpec実行時に参照する必要があります。具体的には example というオブジェクトが保持している full_description メソッドを使用することで現在のコンテキストの名称を取得できます。

[ruby] require 'spec_helper'

describe 'show_example_methods' do

it 'should do something' do

# メソッドの一覧を取得する
p example.methods

# これで実行している処理の名称を取得できる
p example.full_description

# => "show_example_methods should do something"

end end

=>[:full_description, :execution_result,...]

1 example, 0 failures, 1 passed [/ruby]

したがって、ここで取得した show_example_methods should do something をファイルの名称として使用します。

もちろん

ファイル名はOSによって使用できる文字など制限もあります。しかし、基本的にはユーザーテストレベルの内容であり、使用する describe や context で制限に引っかからないようにすれば問題ないように思います。