我有一个严重依赖时间的应用程序。为了使测试更容易,我希望能够在特定时间点启动我的 Node 应用程序。
NODE_FAKE_TIME=true node app.js
我在我的 app.js 中使用类似的东西
if(process.env.NODE_FAKE_TIME) {
var time = parseInt(moment(moment().format('YYYY-MM-DD 04:00:00')).format('XSSS'));
var clock = sinon.useFakeTimers(time, "Date");
}
但是,除了使用 sinon 的 useFakeTimers 之外,还有更好的方法吗?因为这样做确实会改变时钟时间......但是它会影响其他事物,例如 setIntervals 和 setTimeOuts。
我只是想要一种干净的方式来指定应用程序中的时间,因此在我使用 Date.now 的任何地方,它都会按照我在运行时指定的时间进行。
谢谢
最佳答案
我在单元测试中通过直接替换日期上的方法来完成此操作:
var oldNow = Date.now;
var oldGetTime = Date.prototype.getTime;
Date.now = function() { return 0; }
Date.prototype.getTime = Date.now;
上面将自 1970 年 1 月 1 日 00:00:00 以来的时间设置为零 - 只需将返回的值替换为您感兴趣的时间即可。
关于node.js - 如何更改 Node 应用程序实例中的服务器时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18470193/