integtest/spec/helper/matcher/have_same_keys.rb (22 lines of code) (raw):

# frozen_string_literal: true ## # Match the keys in two hashes, printing the extra or missing keys when there # is a failure. RSpec::Matchers.define :have_same_keys do |expected| match do |actual| expected_keys = expected.keys.sort actual_keys = actual.keys.sort expected_keys == actual_keys end failure_message do |actual| expected_keys = expected.keys.sort actual_keys = actual.keys.sort missing = expected_keys - actual_keys extra = actual_keys - expected_keys msg = 'expected keys to match exactly but' if missing msg += " missed:\n" missing.each { |k| msg += "#{k} => #{expected[k]}" } msg += "\nand" if extra end msg += " had extra:\n" extra.each { |k| msg += "#{k} => #{actual[k]}" } msg end end