Rspecの場合:xUnitスタイルのテストフレームワークで行うのと同じ方法で、チェックにメッセージを添付できますか?どうやって?
assert_equal value1, value2, "something is wrong"
should
および should_not
マッチャーのデフォルトメッセージをオーバーライドする2番目の引数(message
)を取ります。
1.should be(2), 'one is not two!'
ただし、通常、デフォルトのメッセージは非常に便利です。
更新:
rSpec 3の場合:
expect(1).to eq(2), "one is not two!"
RSpecでは、賢明な失敗メッセージを出力するのはマッチャーの仕事です。 RSpecに同梱されている一般的なマッチャーは、特定のドメインについて何も知らないため、明らかに一般的な説明のない失敗メッセージしか出力できません。そのため、独自のドメイン固有のマッチャーを作成することをお勧めします。これにより、より読みやすいテストと読みやすい失敗メッセージの両方が得られます。
これが RSpecドキュメント からの例です:
require 'rspec/expectations'
RSpec::Matchers.define :be_a_multiple_of do |expected|
match do |actual|
(actual % expected).zero?
end
failure_message_for_should do |actual|
"expected that #{actual} would be a multiple of #{expected}"
end
failure_message_for_should_not do |actual|
"expected that #{actual} would not be a multiple of #{expected}"
end
description do
"be multiple of #{expected}"
end
end
注:必要なのはmatch
のみで、その他は自動的に生成されます。ただし、質問の要点はもちろん、デフォルトのメッセージとは異なりnotであるため、少なくともfailure_message_for_should
も定義する必要があります。
また、正の場合と負の場合で異なるロジックが必要な場合は、match
の代わりにmatch_for_should
とmatch_for_should_not
を定義できます。
@Chris Johnsenが示すように、期待にメッセージを明示的に渡すこともできます。ただし、読みやすさの利点を失うリスクがあります。
これを比較してください:
user.permissions.should be(42), 'user does not have administrative rights'
これとともに:
user.should have_administrative_rights
これは(大まかに)次のように実装されます。
require 'rspec/expectations'
RSpec::Matchers.define :have_administrative_rights do
match do |thing|
thing.permissions == 42
end
failure_message_for_should do |actual|
'user does not have administrative rights'
end
failure_message_for_should_not do |actual|
'user has administrative rights'
end
end
私の場合、それは括弧の問題でした:
expect(coder.is_partial?(v)).to eq p, "expected #{v} for #{p}"
これにより、引数の数が間違っていましたが、正しい方法は次のとおりです。
expect(coder.is_partial?(v)).to eq(p), "expected #{v} for #{p}"