gpt4 book ai didi

javascript - 如何对 node-cron 作业进行单元测试

转载 作者:行者123 更新时间:2023-12-04 02:02:29 27 4
gpt4 key购买 nike

我需要使用 node-cron 调用一个函数,并想为此编写一个单元测试用例。单元测试用例应该能够测试函数是否基于模式被调用。

下面是我的代码

const server = (module.exports = {
cronJob: null,
scheduledJob: function(pattern) {
server.cronJob = cron.schedule(pattern, () => {
server.run();
});
},
run: function() {
console.log("run called");
},
});

describe("entry point test suite", () => {
it("should call function every second", (done) => {
const pattern = "* * * * * *";
let spy = sinon.spy(server, "run");
server.scheduledJob(pattern);
server.cronJob.Start();
// to do wait for 3 sencond
server.cronJob.Stop();
expect(spy.callCount).eq(3);
});
});

两个问题:
  • 除了 setTimeout什么选项我必须等待 3 秒,以便 cron 作业将运行 3 次,因为模式是每秒。
  • 此测试失败,错误为 server.cronjob.start is not a function。

  • 我怎样才能使这项工作?

    最佳答案

    这是单元测试解决方案:
    server.js :

    const cron = require("node-cron");

    const server = (module.exports = {
    cronJob: null,
    scheduledJob: function(pattern) {
    server.cronJob = cron.schedule(pattern, () => {
    server.run();
    });
    },
    run: function() {
    console.log("run called");
    },
    });
    server.test.js :

    const server = require("./server");
    const sinon = require("sinon");
    const cron = require("node-cron");
    const { expect } = require("chai");

    describe("57208090", () => {
    afterEach(() => {
    sinon.restore();
    });
    describe("#scheduledJob", () => {
    it("should schedule job", () => {
    const pattern = "* * * * * *";
    const runStub = sinon.stub(server, "run");
    const scheduleStub = sinon
    .stub(cron, "schedule")
    .yields()
    .returns({});
    server.scheduledJob(pattern);
    sinon.assert.calledWith(scheduleStub, pattern, sinon.match.func);
    sinon.assert.calledOnce(runStub);
    expect(server.cronJob).to.be.eql({});
    });
    });

    describe("#run", () => {
    it("should run server", () => {
    const logSpy = sinon.spy(console, "log");
    server.run();
    sinon.assert.calledWith(logSpy, "run called");
    });
    });
    });

    覆盖率 100% 的单元测试结果:

      57208090
    #scheduledJob
    ✓ should schedule job
    #run
    run called
    ✓ should run server


    2 passing (12ms)

    ----------------|----------|----------|----------|----------|-------------------|
    File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
    ----------------|----------|----------|----------|----------|-------------------|
    All files | 100 | 100 | 100 | 100 | |
    server.js | 100 | 100 | 100 | 100 | |
    server.test.js | 100 | 100 | 100 | 100 | |
    ----------------|----------|----------|----------|----------|-------------------|

    您要求进行单元测试。如果您需要集成测试,请创建一个新帖子。

    源代码: https://github.com/mrdulin/mocha-chai-sinon-codelab/tree/master/src/stackoverflow/57208090

    关于javascript - 如何对 node-cron 作业进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57208090/

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