Skip to content

Commit f121bbb

Browse files
committed
add hash_eq matcher for nicer hash diffs
1 parent 8308507 commit f121bbb

File tree

3 files changed

+26
-0
lines changed

3 files changed

+26
-0
lines changed

Gemfile

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ group :development do
1111
gem 'ci_reporter_rspec', '1.0.0'
1212
gem 'pry'
1313
gem 'pry-byebug'
14+
gem 'hashdiff'
1415
gem 'rake', '10.1.0'
1516
gem 'syck' if RUBY_VERSION.split('.').first.to_i > 1
1617
end

Gemfile.lock

+2
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ GEM
3030
CFPropertyList (~> 2.2)
3131
git (1.7.0)
3232
rchardet (~> 1.8)
33+
hashdiff (1.0.1)
3334
hiera (1.3.4)
3435
json_pure
3536
json (2.3.0)
@@ -88,6 +89,7 @@ PLATFORMS
8889
DEPENDENCIES
8990
ci_reporter_rspec (= 1.0.0)
9091
collimator (= 0.0.3)
92+
hashdiff
9193
mcollective-client (= 2.8.2)
9294
orc!
9395
pry

spec/matchers/hash_eq.rb

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
require 'hashdiff'
2+
3+
RSpec::Matchers.define :hash_eq do |expected|
4+
match do |actual|
5+
expect(expected).to eq(actual)
6+
end
7+
failure_message do |actual|
8+
diff = Hashdiff.diff(expected, actual)
9+
message = "Expected hashes to be identical, diff is:"
10+
diff.each do |change|
11+
message << "\n"
12+
case change[0]
13+
when "-"
14+
message << "- #{change[1]} => #{change[2]}"
15+
when "+"
16+
message << "+ #{change[1]} => #{change[2]}"
17+
when "~"
18+
message << "~ #{change[1]}: #{change[2]} -> #{change[3]}"
19+
end
20+
end
21+
message
22+
end
23+
end

0 commit comments

Comments
 (0)