🖥

Ruby + Rspec – テスト失敗のエラー時にアフターフック処理して赤文字でカスタムメッセージを標準出力する ( example単位

2024/01/02に公開

after each の中で exception を参照すれば検証失敗エラーのときだけに何らかの処理ができる

通常Rspecはどのように検証が失敗したかを丁寧に表示してくれるが
テストの構成上、標準出力で詳細が分かりづらい場合はアフターフックを仕込んで、何か標準出力させておくとデバッグがしやすいかもしれない

( たとえば Rails の Requestのテストの時に response body を標準出力するなど )

describe 'Test' do
  after(:each) do |example|
    if example.exception
      
      puts "\033[31m" # 赤字開始 - 標準出力で文字色を付ける 

      puts example.full_description # Test It Description
      puts example.description # It Description
      puts example.location # /path/to/spec.rb:15

      puts 'something' # 何か失敗時に見たいものを出力

      puts "\033[0m" # 赤字終了
    end
  end

  it 'It Description' do
    expect(true).to eq false
  end
end

exampleの中身

RSpec::Core::Example のインスタンス

puts example
# <RSpec::Core::Example "is expected to eq false">

https://rubydoc.info/github/rspec/rspec-core/RSpec/Core/Example

example.location

失敗したファイル・ファイル行数が分かる

例:

/path/to/spec.rb:15

example.full_description

description や it の説明を合わせたフルの説明が入るようだ

example.description

it の説明部分が入るようだ

example.exception の中身

よく見るRspecの実行結果(失敗時)が入っているようだ

puts example.exception
# expected: false
#      got: true
#
# (compared using ==)
#
# Diff:
# @@ -1 +1 @@
# -false
# +true
#
# => nil

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

Twitter

https://twitter.com/YumaInaura

公開日時

2023-12-09

GitHubで編集を提案

Discussion