Javascript 使用Jest测试节点cron作业函数
我有一个javascript类,其中包含一个函数,该函数使用Javascript 使用Jest测试节点cron作业函数,javascript,node.js,testing,cron,jestjs,Javascript,Node.js,Testing,Cron,Jestjs,我有一个javascript类,其中包含一个函数,该函数使用节点cron库启动cron作业。 但是我似乎找不到一种方法来测试类和函数 控制节点cron的变量位于.env文件中。 为了进行测试,我使用了jest。 当我的节点应用程序的app.js启动时,我的作业启动(类文件被导入并被导出实例化) .env文件 #CRON JOB FREQUENCY_CRON='30 00 * * *' TIMEZONE="America/Sao_Paulo" SCHEDULED=true INACTIVE_EXP
节点cron
库启动cron作业。
但是我似乎找不到一种方法来测试类和函数
控制节点cron
的变量位于.env
文件中。
为了进行测试,我使用了jest。
当我的节点应用程序的app.js启动时,我的作业启动(类文件被导入并被导出实例化)
.env文件
#CRON JOB
FREQUENCY_CRON='30 00 * * *'
TIMEZONE="America/Sao_Paulo"
SCHEDULED=true
INACTIVE_EXPIRATION_TIME=2592000000 #30 DAYS
CronJob.js
class CronJob {
constructor() {
this.startJob();
}
async startJob() {
cron.schedule(
process.env.FREQUENCY_CRON,
async () => {
//DO SOME DATA PROCESSING
},
{
scheduled: process.env.SCHEDULED,
timezone: process.env.TIMEZONE
}
);
}
}
export default new CronJob();
您可以使用模拟节点cron
模块。在运行测试用例之前,使用dotenv
包从.env
加载环境变量
例如
cronJob.js
:
从“节点cron”导入cron;
类CronJob{
构造函数(){
这个.startJob();
}
异步启动作业(){
cron.schedule(
process.env.FREQUENCY\u CRON,
异步()=>{
log('DO SOME DATA PROCESSING');
},
{
计划:process.env.scheduled,
时区:process.env.timezone,
},
);
}
}
导出默认的新CronJob();
cronJob.test.js
:
从“节点cron”导入cron;
从“路径”导入路径;
require('dotenv').config({path:path.resolve(uu dirname,'./.env'))});
jest.mock('node-cron',()=>{
返回{
附表:jest.fn(),
};
});
描述('61765291',()=>{
它('应该通过',()=>{
constlogspy=jest.spyOn(控制台,'log');
mockImplementationOnce(异步(频率,回调)=>await callback());
要求('./cronJob');
expect(logSpy).toBeCalledWith('DO SOME DATA PROCESSING');
expect(cron.schedule).toBeCalledWith('30000***',expect.any(函数){
已计划:“true”,
时区:“美国/圣保罗”,
});
});
});
.env
:
#CRON JOB
FREQUENCY_CRON='30 00 * * *'
TIMEZONE="America/Sao_Paulo"
SCHEDULED=true
INACTIVE_EXPIRATION_TIME=2592000000 #30 DAYS
100%覆盖率的单元测试结果:
PASS stackoverflow/61765291/cronJob.test.js(8.148s)
61765291
✓ 应通过(30毫秒)
console.log
做一些数据处理
在海关控制台。(node_modules/jest环境酶/node_modules/jest mock/build/index.js:866:25)
------------|---------|----------|---------|---------|-------------------
文件|%Stmts |%Branch |%Funcs |%Line |未覆盖行|s
------------|---------|----------|---------|---------|-------------------
所有文件| 100 | 100 | 100 | 100 |
cronJob.js | 100 | 100 | 100 | 100 |
------------|---------|----------|---------|---------|-------------------
测试套件:1个通过,共1个
测试:1项通过,共1项
快照:共0个
时间:9.145秒,估计10秒
我得到的属性“mockImplementationOnce”在类型(cronExpression:string,func:()=>void,options?:ScheduleOptions)=>ScheduledTask)上不存在。ts必须添加(cron.schedule与jest.Mock一样未知)