如何在节点应用程序的实例中更改服务器时间
我有一个非常依赖时间的应用程序。 为了使testing更容易,我希望能够在特定的时间点启动节点应用程序。
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's的TimeTimers之外,还有更好的方法吗? 因为通过这样做是的,它会改变时钟的时间….但是它会影响其他的东西像setIntervals和setTimeOuts。
我只想要一个干净的方式来指定在应用程序的眼中的时间,所以我使用Date.now它将会在我在运行时指定的时间。
谢谢,
我在unit testing中通过直接replaceDate中的方法来完成此操作:
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到零 – 只需用您感兴趣的时间replace返回的值。
我发现最好的办法是使用var clock = sinon.useFakeTimers(date,“Date”); 然后使用clock.tick(1000)。
允许您在运行时指定date应该在什么时间,通过在时间戳中提供date,然后指定tick之间有多less个MS。
例:
var time = some_timestamp_here; var clock = sinon.useFakeTimers(time, "Date"); // Every second tick the clock ahead one hour setInterval(function(){ clock.tick(3600000); }, 1000);