Are your cukes not timing out?

Whenever we'd run the full cucumber suite we found that were not timing out if they couldn't find a particular element on the page.

For us, the problem was to do with Timecop.

You see, we're using Timecop in our features like this:

  # in features/cucumber_feature.feature
  Given the date is "21 June 2010"
    
  # in features/step_definitions/time_steps.rb
  Given /^the (date|time) is (.+)$/ do |_,string|
    Timecop.freeze(Chronic.parse(string))
  end

This is great, because it allows us to fix the time to whenever we want. And because we use Chronic we can use natural language.

However, because this messes with time, the time outs weren't getting called properly! The easy fix was to put this in our a file in the features/support directory:

  # in features/support/hooks.rb
  After do 
    Timecop.return 
  end

This gets called after every scenario and sets the time back to normal, thus removing the timeout bug.