访问自动模拟函数的 .mock 属性

Accessing .mock property of an automocked function

我有这个代码:

import * as a from 'a-a';
jest.mock('a-a');

describe('a-a', () => {
    beforeAll(async () => {
        const x = await a.x(1); // Calls the mock
        console.log(x);   // 1
        console.log(a.x.mock) // Undefined
    });
});

模拟函数是:

export async function x(data) {
    cache.push(data);

    console.log('HERE'); // this is printed

    return data;
}

模块的 mock 在 __mocks__ 目录中。

a.x() 调用模拟函数,但 a.x.mock 未定义。

这怎么可能? .mock 属性 在哪里?

所以,经过一些调查,我发现 __mocks__ 目录中声明的函数默认情况下没有被 jest.fn() 包装。

我个人觉得这件事有点令人困惑。

所以你可以两者都做

function x(data) {
    cache.push(data);

    return cache;
}

jest.mock('a-a', () => ({x: x}))

如果您在同一个文件中执行所有操作,或者

jest.mock('a-a');

然后在 __mocks__/a-a.js 文件中

export const x = jest.fn(async (data) => {
    cache.push(data);

    return cache;
});