Skip to content

Instantly share code, notes, and snippets.



Forked from shime/
Last active Aug 26, 2020
What would you like to do?

What is this?

How do you compare date/times in RSpec?

If you do this

expect( eq, 4, 2).to_i

and you usually use more human format of expressing time, than just spitting out the miliseconds since January 1, 1970 - I've got some bad news for you.

Have you ever wondered what does this mean?

1) time comparison doesn't pass for different time
     Failure/Error: expect( eq, 4, 2).to_i
       expected: 1396389600
            got: 1396430562

Yes, me too - these miliseconds are not that expressive...

With this gist, that will change into:

  1) time comparison doesn't pass for different time
     Failure/Error: expect( be_the_same_time_as, 4, 2)
       expected 2014-04-02 11:28:41 +0200 to be the same time as 2014-04-02 00:00:00 +0200

Much nicer, right?

Don't believe me?

Run this

bash < <( curl -fsSL )

Trust me, I'm just a random guy from the interwebz!

RSpec::Matchers.define :be_the_same_time_as do |expected|
match do |actual|
expect(expected.strftime("%Y-%m-%dT%H:%M:%S%z").in_time_zone).to eq(actual.strftime("%Y-%m-%dT%H:%M:%S%z").in_time_zone)
describe "time comparison" do
it "passes for equal dates" do
expect(, 4, 2)).to be_the_same_time_as, 4, 2)
it "passes for equal time" do
expect( be_the_same_time_as
it "doesn't pass for different time" do
expect( be_the_same_time_as, 4, 2)
curl -fsSL > /tmp/example_spec.rb
rspec -c /tmp/example_spec.rb

This comment has been minimized.

Copy link

@bonafernando bonafernando commented Feb 26, 2020

Thanks for the fork!

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