Skip to content

Instantly share code, notes, and snippets.

@pencilcheck pencilcheck/_README.md forked from shime/_README.md
Last active Feb 26, 2020

Embed
What would you like to do?

What is this?

How do you compare date/times in RSpec?

If you do this

expect(Time.now.to_i).to eq Time.new(2014, 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(Time.now.to_i).to eq Time.new(2014, 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(Time.now).to be_the_same_time_as Time.new(2014, 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 https://gist.githubusercontent.com/shime/9930893/raw/try.sh )

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)
end
end
describe "time comparison" do
it "passes for equal dates" do
expect(Time.new(2014, 4, 2)).to be_the_same_time_as Time.new(2014, 4, 2)
end
it "passes for equal time" do
expect(Time.now).to be_the_same_time_as Time.now
end
it "doesn't pass for different time" do
expect(Time.now).to_not be_the_same_time_as Time.new(2014, 4, 2)
end
end
curl -fsSL https://gist.githubusercontent.com/shime/9930893/raw/example_spec.rb > /tmp/example_spec.rb
rspec -c /tmp/example_spec.rb
@bonafernando

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.