Skip to content

Instantly share code, notes, and snippets.

@pencilcheck pencilcheck/ forked from shime/
Last active Feb 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 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
You can’t perform that action at this time.