rescueした例外のmessageを上書きしてre-raiseしたい場合、Exception#exception
を使うとスッキリ書ける。
https://docs.ruby-lang.org/ja/latest/method/Exception/i/exception.html
引数を指定しない場合は self を返します。
引数を指定した場合 自身のコピー を生成し Exception#message 属性を error_message にして返します。
# exception_test.rb def override_exception_message_and_reraise begin raise RuntimeError.new('abc') rescue => e raise e.exception('xyz') end end
次のテストはpassする。
# spec/exception_test_spec.rb require_relative '../exception_test.rb' RSpec.describe do it do expect { override_exception_message_and_reraise }.to raise_error(RuntimeError, 'xyz') end end