我的应用程序非常依赖于时间。为了使测试更容易,我希望能够在特定时间点启动我的节点应用程序。
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它将在我运行时指定的时间。
谢谢,
答案 0 :(得分:2)
我在单元测试中通过直接替换Date上的方法来完成这个:
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以来的时间设置为零 - 只需将返回的值替换为您感兴趣的时间。
答案 1 :(得分:0)
我发现最好的方法是使用var clock = sinon.useFakeTimers(date,“Date”);然后使用clock.tick(1000)。
允许您通过在时间戳中提供日期然后指定刻度之间的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);