gpt4 book ai didi

javascript - 使用 Jest 测试 node-cron 作业功能

转载 作者:行者123 更新时间:2023-12-03 12:17:26 26 4
gpt4 key购买 nike

我有一个 javascript 类,其中包含一个使用 node-cron 启动 cron 作业的函数。图书馆。
但我似乎找不到测试类和函数的方法。

控制 node-cron 的变量在 .env文件。
做我正在使用的测试开 Jest .
当我的 Node 应用程序的 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();

最佳答案

您可以使用 jest.mock(moduleName, factory, options)模拟node-cron模块。使用dotenv包从 .env 加载环境变量在运行测试用例之前。

例如。
cronJob.js :

import cron from 'node-cron';

class CronJob {
constructor() {
this.startJob();
}

async startJob() {
cron.schedule(
process.env.FREQUENCY_CRON,
async () => {
console.log('DO SOME DATA PROCESSING');
},
{
scheduled: process.env.SCHEDULED,
timezone: process.env.TIMEZONE,
},
);
}
}

export default new CronJob();
cronJob.test.js :

import cron from 'node-cron';
import path from 'path';

require('dotenv').config({ path: path.resolve(__dirname, './.env') });

jest.mock('node-cron', () => {
return {
schedule: jest.fn(),
};
});

describe('61765291', () => {
it('should pass', () => {
const logSpy = jest.spyOn(console, 'log');
cron.schedule.mockImplementationOnce(async (frequency, callback) => await callback());
require('./cronJob');
expect(logSpy).toBeCalledWith('DO SOME DATA PROCESSING');
expect(cron.schedule).toBeCalledWith('30 00 * * *', expect.any(Function), {
scheduled: 'true',
timezone: 'America/Sao_Paulo',
});
});
});
.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
✓ should pass (30ms)

console.log
DO SOME DATA PROCESSING

at CustomConsole.<anonymous> (node_modules/jest-environment-enzyme/node_modules/jest-mock/build/index.js:866:25)

------------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
------------|---------|----------|---------|---------|-------------------
All files | 100 | 100 | 100 | 100 |
cronJob.js | 100 | 100 | 100 | 100 |
------------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 9.145s, estimated 10s

关于javascript - 使用 Jest 测试 node-cron 作业功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61765291/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com