Skip to content

Instantly share code, notes, and snippets.

@mattwynne
Last active May 21, 2022 13:27
Show Gist options
  • Save mattwynne/736421 to your computer and use it in GitHub Desktop.
Save mattwynne/736421 to your computer and use it in GitHub Desktop.
RSpec matcher to compare two file, using their MD5 hashes
RSpec::Matchers.define(:be_same_file_as) do |exected_file_path|
match do |actual_file_path|
expect(md5_hash(actual_file_path)).to eq(md5_hash(expected_file_path))
end
def md5_hash(file_path)
Digest::MD5.hexdigest(File.read(file_path))
end
end
# e.g. path_to_foo.should be_same_file_as(path_to_bar)
@k-rudy
Copy link

k-rudy commented Apr 27, 2014

Looks great! @mattwyne, where do you usually put custom matcher files under spec folder? Is it support, shared_matchers subfolder or some other folder?

@whiteadam
Copy link

I ran across this on Google and it helped me tremendously. You rule.

@rjmcdonald83
Copy link

๐Ÿ‘

@thomasdarde
Copy link

A very small revision to avoid a depreation warning :
line 3:

expect(md5_hash(actual_file_path)).to eq(md5_hash(exected_file_path))

@mattwynne
Copy link
Author

Wow, amazing that this is still useful after 10 years! I've revised the original with your edits, thanks @thomasdarde!

@thomasdarde
Copy link

Even more amazing is your reactivity after 10 years ๐Ÿ‘

@EmmaB
Copy link

EmmaB commented Jan 9, 2021

Just one small additional correction -- a typo in expected_file_path.

@mattwynne
Copy link
Author

Just one small additional correction -- a typo in expected_file_path.

How did it take 10 years for someone to spot this!? ๐Ÿ˜€๐Ÿ™ˆ

Fixed.

@mattwynne
Copy link
Author

Ah, of course this code needing correction was not 10 years old ๐Ÿคฆ

@Timothy04
Copy link

Just one small additional correction -- a typo in expected_file_path.

You have the same typo on line 1 ๐Ÿ˜…

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment