[Note][Rails] Time Issue for Testing

在寫測試的時候,有時會碰到 fake data (e.g. factory girl)裡面要假造的資料包含時間(Datetime、Date),例如想驗證資料是否符合限制的年、月、日,且測試中會有前後的挪動,這時會發生一個狀況:
在本地端跑 rspec 看似一切風平浪靜,但推上 production 後有時測試卻會失敗,這時就可能需要用到 travel_to 的技巧。

由於邊界值的問題,如果用 Time.now 作為初始時間就很有可能遇到跨天、跨月、跨年的時間點,導致測試失敗,這時可以用 travel_to 的方式,將初始日期定在某個固定的年、月、日、,甚至連時、分也固定,這樣就可以避免把時間前後挪動時有無法預期的年月日變化。

例如在 rspec 中的 before action 設定 travel_to:

這樣就可以確保測試不會有時過有時又不過啦!

參考資料:

http://api.rubyonrails.org/classes/ActiveSupport/Testing/TimeHelpers.html

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.