2

言う、私はのようなブロックを持っています

(1..10).each do |number|
  c.should == d
  array1.empty? should_not be_false
  array2.empty? should be_true
  result.should eq(3)
end

"failed at #{number}"このブロック内で期待が失敗するたびに、失敗メッセージのようなテキストを追加したいと思います。

私はそれを次のように行うことができます:

(1..10).each do |number|
  message = "failed at #{number}"
  c.should == d, message
  array1.empty? should_not be_false, message
  array2.empty? should be_true, message
  result.should eq(3), message
end

だが:

  1. DRYではありません(, messageすべての行に書き込む必要があります)
  2. このメッセージは、デフォルトのRSpecメッセージを上書きします。どういうわけかデフォルトのRSpecメッセージに追加したい
4

1 に答える 1

3

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

(1..10).each do |number|
  begin
    c.should == d
    array1.empty? should_not be_false
    array2.empty? should be_true
    result.should eq(3)
  rescue RSpec::Expectations::ExpectationNotMetError => e
    e.message << "failed at #{number}"
    raise e
  end
end
于 2013-03-13T16:17:29.193 に答える