Dav*_*ave 16 mocking void promise typescript ts-jest
我正在使用 Jest 和 Typescript。我有一个不返回任何内容的异步函数(void)。我如何模拟返回 void?我尝试了下面的
const myMockFn = jest.fn().mockImplementationOnce(() => Promise.resolve(void));
jest.mock('../config', () => ({
setup: async () =>
myMockFn(),
}));
Run Code Online (Sandbox Code Playgroud)
但我收到编译错误
Expression expected.
Run Code Online (Sandbox Code Playgroud)
与“Promise.resolve(void)”相关。
ale*_*xor 30
void这里使用的value位置是javascript运算符。它是一个一元运算符,即它接受单个参数。因此出现错误。
void作为打字稿类型,应该在type位置上使用来表示函数返回值不会被观察到。
const myMockFn = jest.fn().mockImplementationOnce(() => Promise.resolve());
Run Code Online (Sandbox Code Playgroud)
这足以模拟具有返回类型的函数Promise<void>。
您可以模拟一个返回的函数Promise<void>:
jest.fn().mockResolvedValue(undefined)
Run Code Online (Sandbox Code Playgroud)
如果您尝试捕获void函数的返回值,您会得到undefined:
function foo(): void {
console.log('foo called');
}
console.log(foo());
// foo called
// undefined
Run Code Online (Sandbox Code Playgroud)
此外,Promise<void>似乎与Promise<undefined>:
console.log(Promise.resolve());
// Promise { undefined }
console.log(Promise.resolve(undefined));
// Promise { undefined }
Run Code Online (Sandbox Code Playgroud)
undefined兼容并且void可以是解析值:
interface Bar {
foo(): Promise<void>;
}
describe('StackOverflow', () => {
test('mock Promise<void>', async () => {
const mockBar: Bar = {
foo: jest.fn().mockResolvedValueOnce(undefined),
};
await mockBar.foo();
});
});
Run Code Online (Sandbox Code Playgroud)