Code that deals with time and dates can be very difficult to test. Code can behave differently based on the time of day or the day of the year. Time is a peculiar type of state which we can usually ignore in our code, but when code interacts directly with time, we have to face the complexities of time. Time-related bugs can be especially tricky, dangerous, and difficult to reproduce. Time is also related intrinsically to place, since we have to take time zones into account, as well as daylight saving time, which varies from country to country (and from region to region within certain countries).
Fortunately, there are libraries specifically designed to mock time. In this section, we'll learn how to use the
Timecop
gem (https://github.com/travisjeffery/timecop) to test time-related code.
Let's work with a Schedule
class that allows appointments to be created. We don't want appointments to be made for any date in the past. We can test for this without any special code, as follows...