Testing Times & Dates with Rails

November 20, 2019

Track your progress

Sign in to track your progress and access subscription-only lessons.

Log In

Your Teacher

Hi, I'm Chris. I'm the creator of GoRails, Hatchbox.io and Jumpstart. I spend my time creating tutorials and tools to help Ruby on Rails developers build apps better and faster.

About This Episode

Rails provides several helper methods for testing times and dates in your applications. You can now freeze time and time travel like in the movies!

Notes

Testing times and dates can be particularly tricky. Time always keeps ticking forward and dealing with timezones and other things can be a huge pain.

Rails provides some tools for helping test times and dates. Timecop is a popular gem you might have heard of or used in the past, but Rails actually comes with some built-in helpers.

The easiest place to start is to use the "freeze_time" method. It simply stubs out the Time.now, DateTime.now, and Date.today methods with the current time. It will continue to return the exact same time until you call "unfreeze_time".

The "travel" and "travel_to" helpers can freeze time to a specific time in the past or future. They can also accept a block to have time frozen only within the block.

After your tests, the stubs will be cleared out automatically so you don't have to worry about time changes affecting other tests.

If you're testing things like trials, calendar events, or other date and time calculations, these tools are invaluable for making sure your code works as expected.

Resources

Want to stay up-to-date with Ruby on Rails?

Join 86,946+ developers who get early access to new tutorials, screencasts, articles, and more.

    We care about the protection of your data. Read our Privacy Policy.