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. 它不干(我应该, 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 回答