Spec-Zone.ru › Ruby on Rails 4.1

модуль ActiveSupport::Testing::TimeHelpers

Содержит помощники, которые помогают вам тестировать течение времени.

Общедоступные методы экземпляров

travel(duration, &block) Показать исходный код

Изменяет текущее время на время в будущем или прошлом на заданное временное различие, заглушая Time.now и Date.today.

Time.current # => Sat, 09 Nov 2013 15:34:49 EST -05:00
travel 1.day
Time.current # => Sun, 10 Nov 2013 15:34:49 EST -05:00
Date.current # => Sun, 10 Nov 2013

Этот метод также принимает блок, который вернёт текущее время в исходное состояние в конце блока:

Time.current # => Sat, 09 Nov 2013 15:34:49 EST -05:00
travel 1.day do
  User.create.created_at # => Sun, 10 Nov 2013 15:34:49 EST -05:00
end
Time.current # => Sat, 09 Nov 2013 15:34:49 EST -05:00
# File activesupport/lib/active_support/testing/time_helpers.rb, line 60
def travel(duration, &block)
  travel_to Time.now + duration, &block
end
travel_back() Показать исходный код

Возвращает текущее время в исходное состояние, удаляя заглушки, добавленные методами `travel` и `travel_to`.

Time.current # => Sat, 09 Nov 2013 15:34:49 EST -05:00
travel_to Time.new(2004, 11, 24, 01, 04, 44)
Time.current # => Wed, 24 Nov 2004 01:04:44 EST -05:00
travel_back
Time.current # => Sat, 09 Nov 2013 15:34:49 EST -05:00
# File activesupport/lib/active_support/testing/time_helpers.rb, line 116
def travel_back
  simple_stubs.unstub_all!
end
travel_to(date_or_time, &block) Показать исходный код

Изменяет текущее время на заданное время, заглушая Time.now и Date.today для возврата времени или даты, переданных в этот метод.

Time.current # => Sat, 09 Nov 2013 15:34:49 EST -05:00
travel_to Time.new(2004, 11, 24, 01, 04, 44)
Time.current # => Wed, 24 Nov 2004 01:04:44 EST -05:00
Date.current # => Wed, 24 Nov 2004

Даты берутся как их метка времени в начале дня в часовом поясе приложения. Time.now возвращает указанную метку времени, а Time.now её эквивалент в часовом поясе системы. Аналогично, Date.current возвращает дату, равную аргументу, а Date.today дату в соответствии с Time.now, которая может отличаться. (Обратите внимание, что вам редко нужно иметь дело с Time.now, или Date.today, чтобы соблюсти часовой пояс приложения, всегда используйте Time.current и Date.current.)

Этот метод также принимает блок, который вернёт текущее время в исходное состояние в конце блока:

Time.current # => Sat, 09 Nov 2013 15:34:49 EST -05:00
travel_to Time.new(2004, 11, 24, 01, 04, 44) do
  Time.current # => Wed, 24 Nov 2004 01:04:44 EST -05:00
end
Time.current # => Sat, 09 Nov 2013 15:34:49 EST -05:00
# File activesupport/lib/active_support/testing/time_helpers.rb, line 89
def travel_to(date_or_time, &block)
  if date_or_time.is_a?(Date) && !date_or_time.is_a?(DateTime)
    now = date_or_time.midnight.to_time
  else
    now = date_or_time.to_time
  end

  simple_stubs.stub_object(Time, :now, now)
  simple_stubs.stub_object(Date, :today, now.to_date)

  if block_given?
    begin
      block.call
    ensure
      travel_back
    end
  end
end

© 2004–2016 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API