Skip to content

Commit a274d4f

Browse files
authored
Merge pull request rails#54303 from joshuay03/add-time-arg-to-freeze-time
Allow passing in a date or time to ActiveSupport::Testing::TimeHelpers#freeze_time
2 parents a28d2e4 + a1b1edf commit a274d4f

File tree

3 files changed

+28
-3
lines changed

3 files changed

+28
-3
lines changed

activesupport/CHANGELOG.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,14 @@
1+
* Allow the `#freeze_time` testing helper to accept a date or time argument.
2+
3+
```ruby
4+
Time.current # => Sun, 09 Jul 2024 15:34:49 EST -05:00
5+
freeze_time Time.current + 1.day
6+
sleep 1
7+
Time.current # => Mon, 10 Jul 2024 15:34:49 EST -05:00
8+
```
9+
10+
*Joshua Young*
11+
112
* `ActiveSupport::JSON` now accepts options
213

314
It is now possible to pass options to `ActiveSupport::JSON`:

activesupport/lib/active_support/testing/time_helpers.rb

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -238,12 +238,16 @@ def travel_back
238238
end
239239
alias_method :unfreeze_time, :travel_back
240240

241-
# Calls +travel_to+ with +Time.now+. Forwards optional <tt>with_usec</tt> argument.
241+
# Calls +travel_to+ with +date_or_time+, which defaults to +Time.now+.
242+
# Forwards optional <tt>with_usec</tt> argument.
242243
#
243244
# Time.current # => Sun, 09 Jul 2017 15:34:49 EST -05:00
244245
# freeze_time
245246
# sleep(1)
246247
# Time.current # => Sun, 09 Jul 2017 15:34:49 EST -05:00
248+
# freeze_time Time.current + 1.day
249+
# sleep(1)
250+
# Time.current # => Mon, 10 Jul 2017 15:34:49 EST -05:00
247251
#
248252
# This method also accepts a block, which will return the current time back to its original
249253
# state at the end of the block:
@@ -254,8 +258,8 @@ def travel_back
254258
# User.create.created_at # => Sun, 09 Jul 2017 15:34:49 EST -05:00
255259
# end
256260
# Time.current # => Sun, 09 Jul 2017 15:34:50 EST -05:00
257-
def freeze_time(with_usec: false, &block)
258-
travel_to Time.now, with_usec: with_usec, &block
261+
def freeze_time(date_or_time = Time.now, with_usec: false, &block)
262+
travel_to date_or_time, with_usec: with_usec, &block
259263
end
260264

261265
private

activesupport/test/time_travel_test.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -487,6 +487,16 @@ def test_time_helper_freeze_time
487487
travel_back
488488
end
489489

490+
def test_time_helper_freeze_time_with_time_arg
491+
expected_time = Time.now + 1.day
492+
freeze_time expected_time
493+
sleep(1)
494+
495+
assert_equal expected_time.to_fs(:db), Time.now.to_fs(:db)
496+
ensure
497+
travel_back
498+
end
499+
490500
def test_time_helper_freeze_time_with_block
491501
expected_time = Time.now
492502

0 commit comments

Comments
 (0)