Node. 使用 mocha 进行测试时的 CronJob 执行



所以,我有一些js代码,它是一个slackbot,它应该简单地监听和解析提供的日期,然后启动一个CronJob来运行某个函数根据提供的cron或日期格式。像这样的东西。

var CronJob = require ('cron').CronJob;
...
robot.respond(date, function (msg)) {
if(!isValidDate(date)) msg.reply("not a valid date);
var interval = isCronDate(date) ? date : new Date(date);
msg.reply("Job about to be scheduled.")
var schedule = new CronJob(interval, processDataOnDate(), function() { msg.reply("hello") },  true);
}

我有一个咖啡文件测试此代码,我希望返回某些响应,但我不希望根据我在测试代码中提供的日期执行 cron 作业。然而,事实确实如此。这正常吗?摩卡是否因为这是一个单元测试而强制代码完成执行,还是我做错了什么?我正在运行它来执行我的单元测试。

mocha --compilers coffee:coffee-script/register

有关更多信息,我将其作为 slackbot 运行,因此这一切都以"说"和"回复"的形式完成。我的一个测试看起来像这样。

beforeEach ->
    yield @room.user.say 'bob', '@bot schedule at 2017-05-25 18:00:00'
expect(@room.messages).to.eql [
    ['bob', 'bot schedule at 2017-05-25 18:00:00']
    ['bot', 'Job about to be scheduled']
]
测试

失败并通知我实际结果包括来自机器人的消息"hello",尽管我在测试中提供的日期是将来的日期。

初始化 CronJob 时的最后一个参数指示它应立即执行作业:

new CronJob(interval, processDataOnDate(), function() { msg.reply("hello") },  true);

这将导致作业立即执行,即使您的执行日期是将来的日期。

请参阅:https://www.npmjs.com/package/cron#api

最新更新