如何让 Jest 模拟函数 toHaveBeenCalledTimes 对每个测试套件都有新的计数?

Lor*_*lor 3 javascript jestjs

当我断言调用模拟函数的次数时,导入的模拟函数总是返回调用的组合次数。

例如,第一个测试套件有一个称为模拟函数的函数import { get } from 'axios',预期toHaveBeenCalledTimes1。但是,第二个测试套件,调用的函数get一次toHaveBeenCalledTimes2不是1

如何让模拟函数toHaveBeenCalledTimes为每个测试服返回一个刷新计数?

describe('fetchAData', () => {
    it('should return the right A data response', (done) => {
        const sampleResponse = { data: dataASample };

        get.mockImplementationOnce(() => {
            return Promise.resolve(sampleResponse);
        });

        fetchAData().then(() => {
            expect(get).toHaveBeenCalledTimes(1);

            done();
        });
    });
});

describe('fetchBData', () => {
    it('should return the right B data response', (done) => {
        const sampleResponse = { data: dataBSample };

        get.mockImplementationOnce(() => {
            return Promise.resolve(sampleResponse);
        });

        fetchBData().then(() => {
            expect(get).toHaveBeenCalledTimes(1); // -> Return `2`
            done();
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

Lor*_*lor 6

mockFn.mockReset()刚刚成功,https://jestjs.io/docs/en/mock-function-api#mockfnmockreset

执行 mockFn.mockClear() 所做的一切,并删除任何模拟的返回值或实现。

beforeEach(() => {
    get.mockReset();
});
Run Code Online (Sandbox Code Playgroud)

  • 以防万一有人需要,`jest.resetAllMocks()` 对所有模拟函数都做同样的事情。 (3认同)