質問

RSPECで:Xunitスタイルのテストフレームワークで行うのと同じように、メッセージをチェックに添付できますか?どのように?

assert_equal value1, value2, "something is wrong"
役に立ちましたか?

解決

shouldshould_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 必要な場合、他のものは自動的に生成されます。しかし、あなたの質問の全体のポイントはもちろんあなたがすることです いいえ デフォルトのメッセージのように、少なくとも定義する必要があります failure_message_for_should.

また、定義することもできます match_for_shouldmatch_for_should_not それ以外の match 肯定的および否定的な場合に異なるロジックが必要な場合。

@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}"
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top