Javascript 使用sinon FakeTimers的测试节点计划

Javascript 使用sinon FakeTimers的测试节点计划,javascript,node.js,sinon,Javascript,Node.js,Sinon,我想从节点计划包中测试我的计划作业。使用sinonuseFakeTimers()我可以跳过时间。不幸的是,我的调度程序似乎并不“相信”假时间。当我将调度程序设置为1分钟时,它可以完美地工作,因此我知道它可以工作。我还试图在通话前一分钟设置假时间,但也不起作用 西农: let clock = sinon.useFakeTimers(moment().toDate()); clock.tick(60*60*23); 还有我的日程安排工作: let job_2 =

我想从
节点计划
包中测试我的
计划作业
。使用sinon
useFakeTimers()
我可以跳过时间。不幸的是,我的调度程序似乎并不“相信”假时间。当我将调度程序设置为1分钟时,它可以完美地工作,因此我知道它可以工作。我还试图在通话前一分钟设置假时间,但也不起作用

西农:

let clock = sinon.useFakeTimers(moment().toDate());
                clock.tick(60*60*23);
还有我的日程安排工作:

 let job_2 = schedule.scheduleJob(new Date(date.toISOString()), function (user) {
        console.log("get's here..");
        if (user.status === 'pending') {
            user.remove(function (error) {
                if (!error) {
                    mid.addEvent({
                        action: 'deleted_user'
                    }, {
                        name: user.name
                    }, function (error) {
                        if (error) {
                            console.log("error: " + error);
                        }
                    });
                }
            });
        }
    }.bind(null, user));

有人知道吗

基本上
sinon.useFakeTimers()
方法将setInterval和setTimeout异步方法替换为内置的同步方法,您可以使用
clock.tick()进行控制

clock.tick(time)
方法调用被替换的同步方法,基本上按指定的
time
转发时间

另一方面,
节点调度
是类似于
cron的作业调度程序,因此它不使用setInterval和setTimeout

希望这能让事情变得更清楚一点

你的测试是什么样的?节点调度作者使用sinon测试他们的代码,所以我不明白为什么这会成为一个问题

我能够使用jasmine的fakeAsync测试angular 6中的工作,如下所示:


它('触发cronJob时应调用适当的函数,糟糕的测试',
fakeAsync(()=>{
const channelSpy=spyOn(信使服务,'createChannels');
const listenerSpy=spyOn(信使服务,'createListener');
const messenger Spy=间谍(messenger Service.messenger,
“全部取消订阅”);
//重置你的计数
channelSpy.calls.reset();
listenerSpy.calls.reset();
messengerSpy.calls.reset();
messagerservice.cronJob.cancel();
//每秒运行一次cron作业
messengerService.cronJobTime='**';
scheduleMyJsCronJob();
勾号(3150);
messagerservice.cronJob.cancel();
expect(channelSpy.calls.count()).toEqual(3);
expect(listenerSpy.calls.count()).toEqual(3);
expect(messengerSpy.calls.count()).toEqual(3);

}));谢谢你的帮助!我试试看。