【发布时间】:2015-12-30 11:08:36
【问题描述】:
在编写依赖于当前日期/时间的集成测试时,能够freeze 或travel 到特定时刻非常方便(例如timecop 用于ruby)
有没有办法在 Elixir/Erlang 中实现类似的功能?
我尝试使用meck 库模拟Erlang 内置插件:os.timestamp、:erlang.universaltime,但使用:cannot_mock_builtin 失败。
原则上,我可以实现自己的实用程序库,而不是轻松模拟当前时间,然后在任何地方使用它而不是内置方法;但是,一些库使用内置函数,因此这不是一个可行的选项(例如 Ecto.Model.Timestamps,生成 inserted_at 和 updated_at 值)
【问题讨论】:
-
你检查过 Erlang 18 最近的更新日志吗?它具有 TImeWarp 功能,并且 ferd 在 learnyousomeerlang 中对此进行了介绍。 Erlang time warp documentation 和 ferd writings on the subject。不确定他们是否回答了您的问题...
-
@Olinasc 时间扭曲功能通常只与对更改系统时间和时钟的反应有关,它不允许您仅更改测试时间。