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
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
例如
\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();\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.env:
#CRON JOB\nFREQUENCY_CRON=\'30 00 * * *\'\nTIMEZONE="America/Sao_Paulo"\nSCHEDULED=true\nINACTIVE_EXPIRATION_TIME=2592000000 #30 DAYS\n100%覆盖率的单元测试结果:
\n\n#CRON JOB\nFREQUENCY_CRON=\'30 00 * * *\'\nTIMEZONE="America/Sao_Paulo"\nSCHEDULED=true\nINACTIVE_EXPIRATION_TIME=2592000000 #30 DAYS\n| 归档时间: | 
 | 
| 查看次数: | 7565 次 | 
| 最近记录: |