只要期望在块内失败,是否可以将一些文本附加到RSpec失败消息?

时间:2013-03-13 15:54:29

标签: ruby rspec

说,我有一个像

这样的块
(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消息

1 个答案:

答案 0 :(得分:1)

您可以使用其他消息捕获并重新引发异常:

(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