There are a few Cucumber steps that have made their way into more and more of our projects. I thought I’d share for fun.
These are simple wrappers for things you can already do easily with Cucumber, but instead of having to toss them in individual steps, you can toss them right in the feature when you’re trying to see what’s going on.
Given some setup stuff
When i go to a troublesome page
And I see wtf is going on
Then the result is good
If you need to do anything with time, time zones, or whatever, Timecop is your new best friend.
I started using it on an app we were developing where I had two parties, potentially in different time zones, scheduling appointments with each other. I wanted to test in a few places that they were getting reminders at the right time, seeing the correct time in those reminder emails1, etc.
The first let’s you set the current time quickly. For example,
Given the time is 10:00 UTC
This was great for my emails where I wanted to know that it was showing the right time to the user. I did this, then checked that the time was 5 am for my user in Detroit:
And the time is Jan 1 2010, 10:00 UTC
The time passing step is great when you need to do things that are scheduled in the future. For my reminder example, an appointment reminder is sent 24 hours before the event. Here’s what I do in my features:
Given an appointment between "Bob" and "Sue" in 2 days
When 25 hours pass
Then an email is sent to "Bob"...
1 I found my emails were wrong. I was setting Time.zone in the mailer, and outputting times in the body. I found I had to explicitly call .in_time_zone in the mailer view, which I hadn’t expected. Yay tests!