Module: RSpec::EnrichedJson::ExpectationHelperWrapper

Defined in:
lib/rspec/enriched_json/expectation_helper_wrapper.rb

Defined Under Namespace

Modules: Serializer

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.install!Object



22
23
24
25
26
# File 'lib/rspec/enriched_json/expectation_helper_wrapper.rb', line 22

def self.install!
  RSpec::Expectations::ExpectationHelper.singleton_class.prepend(self)
  RSpec::Expectations::PositiveExpectationHandler.singleton_class.prepend(PositiveHandlerWrapper)
  RSpec::Expectations::NegativeExpectationHandler.singleton_class.prepend(NegativeHandlerWrapper)
end

Instance Method Details

#handle_failure(matcher, message, failure_message_method) ⇒ Object



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/rspec/enriched_json/expectation_helper_wrapper.rb', line 75

def handle_failure(matcher, message, failure_message_method)
  original_message = nil
  if message
    original_message = matcher.send(failure_message_method)
  end

  super
rescue RSpec::Expectations::ExpectationNotMetError => e
  expected_raw = extract_value(matcher, :expected, failure_message_method)
  actual_raw = extract_value(matcher, :actual, failure_message_method)
  negated = failure_message_method == :failure_message_when_negated

  details = {
    expected: Serializer.serialize_value(expected_raw),
    actual: Serializer.serialize_value(actual_raw),
    original_message: original_message,
    matcher_name: matcher.class.name,
    diffable: matcher.respond_to?(:diffable?) && matcher.diffable?,
    negated: negated
  }

  if details[:diffable] && expected_raw && actual_raw
    diff = generate_diff(actual_raw, expected_raw)
    details[:diff] = diff unless diff.nil? || diff.strip.empty?
  end

  raise EnrichedExpectationNotMetError.new(e.message, details)
end