node.js - 如何更改 Node 应用程序实例中的服务器时间

标签 node.js

我有一个严重依赖时间的应用程序。为了使测试更容易,我希望能够在特定时间点启动我的 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/

相关文章:

javascript - 从 HTML 获取付款金额以在 Node.js 文件中收费

javascript - Node.js 应用程序中的 JSON 正文始终为空

javascript - 如何在nodejs中获取ReferenceError的详细信息

javascript - Nodejs - 将基于 Promise 的架构与事件混合在一起是错误的

node.js - createConnection 如何在 mysql 中与 nodeJS 一起工作?

node.js - 如何在 mongoDB 集合中分别保存日期和时间?

mongodb - 如何使用 GridFS 使用 Node.js 和 Mongoose 存储图像

javascript - Node CLI 单元测试

node.js - 在带有 npm 的 Lambda 函数中使用 AWS Cognito

javascript - 我应该如何处理许多嵌套匿名函数中的范围?