iT邦幫忙

2021 iThome 鐵人賽

DAY 28
0
自我挑戰組

Rails測試寫起乃!!!系列 第 28

Day28 測試寫起乃 - Timecop

Timecop 可以幫助你在測試時將時間凍住,因為有些訊息中會帶有時間,如果要確保時間一致就必須要將時間凍住才可以測試。

安裝 Timecop

官方文件

gem 'timecop' & bundle install

Timecop 使用的三種方式

freeze => 時間都會停留在指定的時間,或是直到你返回原來的時間。

[16] pry(main)> Timecop.freeze(Time.parse('2020/09/30 08:30:30')) # 2020-09-30 08:30:30 +0800
[17] pry(main)> Time.now # 2020-09-30 08:30:30 +0800
[18] pry(main)> Timecop.return
[19] pry(main)> Time.now # 2021-09-29 22:23:25 +0800

travel => 時間會移動到你指定的時間,並且繼續

[16] pry(main)> Timecop.travel(Time.parse('2021/11/30 08:30:30')) # 2021-11-30 08:30:30 +0800
# wait 3 second
[17] pry(main)> Time.now # 2021-11-30 08:30:33 +0800
[18] pry(main)> Timecop.return
[19] pry(main)> Time.now # 2021-09-29 22:23:25 +0800

scale => 將時間單位調整

[37] pry(main)> Timecop.scale(10) # 1 秒等於 10 秒
2020-09-29 23:15:58 +0800
[46] pry(main)> sleep 1
[47] pry(main)> Time.now
2020-09-29 23:16:08 +0800

Timecop in Rspec

before(:all) do
  Timecop.freeze(Time.current)
end

after(:all) do
  Timecop.return
end

在測試前將時間凍住,並在最後 return,通常必須成對為最佳

參考來源:
用 Timecop 自由穿梭時間軸


上一篇
Day27 測試寫起乃 - logger level
下一篇
Day29 測試寫起乃 - 加入到 Travis CI
系列文
Rails測試寫起乃!!!30

尚未有邦友留言

立即登入留言