bsa*_*oss 5 javascript testing cron node.js jestjs
我有一个 javascript 类,其中包含一个使用该库启动 cron 作业的函数node-cron
。但我似乎找不到测试类和函数的方法。
控制的变量node-cron
位于.env
文件中。为了进行测试,我使用jest。当我的节点应用程序的 app.js 启动时,我的工作开始(类文件被导入并导出实例化)
.env 文件
#CRON JOB
FREQUENCY_CRON='30 00 * * *'
TIMEZONE="America/Sao_Paulo"
SCHEDULED=true
INACTIVE_EXPIRATION_TIME=2592000000 #30 DAYS
Run Code Online (Sandbox Code Playgroud)
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();
Run Code Online (Sandbox Code Playgroud)
您可以使用jest.mock(moduleName,factory,options)来模拟node-cron
模块。在运行测试用例之前使用dotenv
包加载环境变量。.env
例如
\n\ncronJob.js
:
import cron from \'node-cron\';\n\nclass CronJob {\n constructor() {\n this.startJob();\n }\n\n async startJob() {\n cron.schedule(\n process.env.FREQUENCY_CRON,\n async () => {\n console.log(\'DO SOME DATA PROCESSING\');\n },\n {\n scheduled: process.env.SCHEDULED,\n timezone: process.env.TIMEZONE,\n },\n );\n }\n}\n\nexport default new CronJob();\n
Run Code Online (Sandbox Code Playgroud)\n\ncronJob.test.js
:
import cron from \'node-cron\';\nimport path from \'path\';\n\nrequire(\'dotenv\').config({ path: path.resolve(__dirname, \'./.env\') });\n\njest.mock(\'node-cron\', () => {\n return {\n schedule: jest.fn(),\n };\n});\n\ndescribe(\'61765291\', () => {\n it(\'should pass\', () => {\n const logSpy = jest.spyOn(console, \'log\');\n cron.schedule.mockImplementationOnce(async (frequency, callback) => await callback());\n require(\'./cronJob\');\n expect(logSpy).toBeCalledWith(\'DO SOME DATA PROCESSING\');\n expect(cron.schedule).toBeCalledWith(\'30 00 * * *\', expect.any(Function), {\n scheduled: \'true\',\n timezone: \'America/Sao_Paulo\',\n });\n });\n});\n
Run Code Online (Sandbox Code Playgroud)\n\n.env
:
#CRON JOB\nFREQUENCY_CRON=\'30 00 * * *\'\nTIMEZONE="America/Sao_Paulo"\nSCHEDULED=true\nINACTIVE_EXPIRATION_TIME=2592000000 #30 DAYS\n
Run Code Online (Sandbox Code Playgroud)\n\n100%覆盖率的单元测试结果:
\n\n#CRON JOB\nFREQUENCY_CRON=\'30 00 * * *\'\nTIMEZONE="America/Sao_Paulo"\nSCHEDULED=true\nINACTIVE_EXPIRATION_TIME=2592000000 #30 DAYS\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
7565 次 |
最近记录: |