RSpec extension for controlling time within examples, using the timecop gem.
Add this line to your application's Gemfile:
gem 'rspec-timecop'
And then execute:
$ bundle install
Or install it yourself as:
$ gem install rspec-timecop
In a RSpec example you can use the timecopped method to freeze time for the subject of the example:
class Foobar
def self.hi
OtherObject.time_check(Time.now)
'hi'
end
end
describe Foobar do
let(:now) { Time.now }
before do
expect(OtherObject).to receive(:time_check)
.with(now)
end
describe 'without the helper' do
subject do
result = nil
Timecop.freeze(now) { result = Foobar.hi }
result
end
it { should eq('hi') }
end
describe 'with the helper' do
subject { timecopped(now) { Foobar.hi } }
it { should eq('hi') }
end
end
Without Timecop.freeze the value for Time.now being passed into ObjectOther#time_check could not be consistently checked. And using #timecopped hides away example how Timecop.freeze is used so that we can see the subject call more clearly.
Links to other places on the web where this projects exists:
- timecop-rspec, similar ideas but a different implementation
- Fork it ( https://github.com/sugarcrm/rspec-timecop/fork )
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request
Copyright 2025 SugarCRM Inc., released under the MIT License.