使用 mocha 进行测试时的 Node.js CronJob 执行
Posted
技术标签:
【中文标题】使用 mocha 进行测试时的 Node.js CronJob 执行【英文标题】:Node.js CronJob execution when using mocha for testing 【发布时间】:2017-10-26 16:09:53 【问题描述】:所以,我有一些 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 是否会强制代码完成执行,还是我做错了什么?我正在运行它来执行我的单元测试。
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']
]
测试失败并通知我实际结果包括来自机器人的消息“你好”,尽管我在测试中提供的日期是将来的日期。
【问题讨论】:
【参考方案1】:初始化 CronJob 时的最后一个参数表明它应该立即执行作业:
new CronJob(interval, processDataOnDate(), function() msg.reply("hello") , true);
这将导致作业立即执行,即使您的执行日期在将来。
见:https://www.npmjs.com/package/cron#api
【讨论】:
以上是关于使用 mocha 进行测试时的 Node.js CronJob 执行的主要内容,如果未能解决你的问题,请参考以下文章
使用 Node NOT io.js 在 Mocha 测试中使用 jQuery
您如何安装和运行 Mocha,Node.js 测试模块?安装后获取“mocha:找不到命令”
在我的 node.js 应用程序中使用 mongodb 和 mongoose 在 Mocha 和 Chai 上运行测试后无法清除数据库
在我的 node.js 应用程序中使用 mongodb 和 mongoose 在 Mocha 和 Chai 上运行测试后无法清除数据库