4

私は次のような検証で多くの悪い文字列をテストしています:

['0', '3:a', 'xx:11', '-1', '-3:00', 'h', 'h2', 'h2h', 'm', 'm10', 'm10m', '2hm', 'h2m', 'hm2', '2m10h', '2m10m', '2h10h'].each do |input|
  FactoryGirl.build(:time_record, duration_string: input).should have(1).error_on('duration_string'), "Tested value was '#{input}'"
end

悲しいことに、そのうちの 1 つが失敗した場合、メッセージexpected 1 error on :duration_string, got 0はどちらが失敗したかを教えてくれません。次のように、デフォルト メッセージの代わりに表示される 2 番目の引数を渡すことができることを知っています。

x.should have(1).error_on('duration_string'), "Tested value was '#{input}'"

しかし、これは元のメッセージを隠します。自分のメッセージを置き換えるのではなく、元のメッセージに追加する方法はありますか?

ありがとうございました。

4

2 に答える 2

6

別のメッセージで例外をキャッチして再発生させることができます。

['0', '3:a', 'xx:11', '-1', '-3:00', 'h', 'h2', 'h2h', 'm', 'm10', 'm10m', '2hm', 'h2m', 'hm2', '2m10h', '2m10m', '2h10h'].each do |input|
  begin
    FactoryGirl.build(:time_record, duration_string: input).should  have(1).error_on('duration_string'), "Tested value was '#{input}'"
  rescue RSpec::Expectations::ExpectationNotMetError => e
    e.message << "failed at #{input}"
    raise e
  end
end
于 2013-03-13T18:08:25.613 に答える
1

私はこのように解決しました:

['0', '3:a', 'xx:11', '-1', '-3:00', 'h', 'h2', 'h2h', 'm', 'm10', 'm10m', '2hm', 'h2m', 'hm2', '2m10h', '2m10m', '2h10h'].each do |input|
  it "does not accept #{input}" do
    FactoryGirl.build(:time_record, duration_string: input).should have(1).error_on('duration_string'), "Tested value was '#{input}'"
  end
end

このようにして、統計のスペック数を安価に増やすこともできます。;)

于 2013-03-14T08:07:16.173 に答える