在 Jest 中,我如何模拟 void 的 Promise?

In Jest, how do I mock a Promise of void?

我正在使用 Jest 和 Typescript。我有一个异步函数 returns 什么都没有(无效)。我如何模拟返回无效?我尝试了以下

const myMockFn = jest.fn().mockImplementationOnce(() => Promise.resolve(void));
jest.mock('../config', () => ({
  setup: async () =>
  myMockFn(),
}));

但是我得到了编译错误

Expression expected.

与“Promise.resolve(void)”有关。

void这里用在value位置是javascript运算符。它是一个一元运算符,即它接受一个参数。因此错误。

void 作为打字稿类型应该用在 type 位置来表示函数 return 值将不会被观察到。

const myMockFn = jest.fn().mockImplementationOnce(() => Promise.resolve());

这足以模拟 Promise<void> return 类型的函数。

对于更短的语法,您还可以使用 mockResolvedValue 函数:

// For resolved promises
const myMockFn = jest.fn().mockResolvedValueOnce({})  

// For rejected promises
const myMockFn = jest.fn().mockRejectedValueOnce(new Error('Your message'))