使用过去的日期和时间方案运行 NodeJS 应用程序

nfs0ujit  于 2022-12-22  发布在  Node.js
关注(0)|答案(1)|浏览(85)

我们的NodeJS应用程序之一根据当前日期和时间执行各种业务操作。
使用JS原生Date和moment库进行日期相关操作(比较、使用日期范围的MongoDB查询等)
在调试任何问题期间,我们希望使用过去的日期和时间运行应用程序模拟,以重新生成确切的场景。
直接的答案应该是更改系统日期和时间(OS),并运行应用程序,但当系统时间错误时,连接到各种第三方服务(如MongoDB,Salesforce等)会遇到挑战。
系统上运行的其他应用程序也会受到此错误日期和时间的影响。
为了克服这一点,我正在寻找某种时间模拟库,它可以在启动时为我的NodeJS应用程序初始化过去的时钟,而无需更改系统日期和时间。
请给我提些建议.
尝试将操作系统日期和时间更改为过去和运行应用程序。应用程序运行良好,但集成中断。所以我觉得这不是一个好主意。

j7dteeu8

j7dteeu81#

您可以研究一下单元测试工具来实现这一点。
例如,您可以查看@sinonjs/fake-timer库:https://github.com/sinonjs/fake-timers
您可以这样使用它:

import FakeTimers from "@sinonjs/fake-timers";
    FakeTimers.install({
        now: new Date("2002-12-21"),
     });
     console.log(new Date()); //2002-12-21T00:00:00.000Z

或者开个玩笑:https://jestjs.io/(jest使用@sinonjs/伪定时器库)
你可以这样做:

jest.useFakeTimers();
    jest.setSystemTime(new Date('2002-12-21'));
    const date = new Date();
    console.log(date);

然后将从模拟中检索每个新的Date示例。

相关问题