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 =
节点计划
包中测试我的计划作业
。使用sinonuseFakeTimers()
我可以跳过时间。不幸的是,我的调度程序似乎并不“相信”假时间。当我将调度程序设置为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);
}));代码>谢谢你的帮助!我试试看。