RSpec: как смоделировать SQL NOW () - PullRequest
0 голосов
/ 13 мая 2018

Я могу смоделировать Time.now с большим таймкопом драгоценным камнем.

Time.now
 => 2018-05-13 18:04:46 +0300

Timecop.travel(Time.parse('2018.03.12, 12:00'))

Time.now
 => 2018-03-12 12:00:04 +0300

TeacherVacation.first.ends_at
Thu, 15 Mar 2018 12:00:00 MSK +03:00

TeacherVacation.where('ends_at > ?', Time.now).count
1

Но (очевидно) это не сработает при использовании NOW() в запросе:

TeacherVacation.where('ends_at > NOW()').count
0

Можно ли издеваться NOW(), чтобы он возвращал результаты в течение определенного времени?

1 Ответ

0 голосов
/ 13 мая 2018

Я думаю, что решение для этого - DI (внедрение зависимости)

def NOW(time = Time.now)
  time
end

В тесте

current_test = Time.new(2018, 5, 13)
p NOW(current_test)

В производстве

p NOW
...