如何将自定义消息附加到RSpec异常消息

时间:2017-08-20 19:21:05

标签: ruby rspec

有没有办法在RSpec Exception中添加/附加自定义消息?

expected [...] to match [...] missing...extra...

我知道我可以将一个额外的异常消息参数传递给上述期望但我不想拥有自己的异常但是要添加一些我想要保留的RSpec异常。所以上面的陈述通常会引发CUSTOMER ID: 12345 - expected [...] to match [...] missing...extra...我认为有用,但我希望有例如客户ID已添加到邮件中,例如trisqr=@(x) tri(x).*tri(x); xmin=-2; xmax=2; Energy=integral(trisqr,xmin,xmax) 也许是通过猴子修补?

1 个答案:

答案 0 :(得分:0)

您可以使用handle_failure方法进行修补。

module MyExpectationHelper
  def self.handle_failure(matcher, message, failure_message_method)
    message = message.call if message.respond_to?(:call)
    message ||=''
    message += matcher.__send__(failure_message_method) #changes ||= to += to prepend message
    if matcher.respond_to?(:diffable?) && matcher.diffable?
      ::RSpec::Expectations.fail_with message, matcher.expected, matcher.actual
    else
      ::RSpec::Expectations.fail_with message
    end
  end
end

describe 'append message' do
  module RSpec
    module Expectations
      module ExpectationHelper
        def self.handle_failure(matcher, message, failure_message_method)
          MyExpectationHelper.handle_failure(matcher, message, failure_message_method)
        end
      end
    end
  end
  it 'should contain the message' do
    expect(products).to match_array expected_products, 'CUSTOMER ID: 12345 -  '
  end
end