作业功能"/>
用Jest测试节点计划作业功能
我有一个javascript类,其中包含一个使用node-cron
库启动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
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
更多推荐
用Jest测试节点计划作业功能
发布评论