NodeJS “Promise”类型的参数< unknown>不能赋给“void”类型的参数,ts(2345)- mockReturnValueOnce

tez616oj  于 2023-01-16  发布在  Node.js
关注(0)|答案(4)|浏览(513)

方法mockReturnValueOnce显示**"Promise"类型的参数无法赋值给"void"类型的参数。ts(2345)**。
我已经试过了:

.spyOn(bcrypt, 'hash')
 .mockImplementation(async () => Promise.reject(new Error()))

看这个Type error: mockReturnValueOnce from jest.spyOn() inferring argument type as void类似的问题,但没有效果。
我注意到vscode由于某种原因在方法参数中推断为void,但我仍然没有弄清楚原因
方法签名:https://i.stack.imgur.com/6dvMY.png
奇怪的是我已经在另一个文件中模拟了另一个类,而且它起作用了:
x一个一个一个一个x一个一个二个x

093gszye

093gszye1#

我有另一个选择,也许这看起来更好

test('Should throw if bcrypt throws', async () => {
  const sut = makeSut()
  jest.spyOn(bcrypt, 'hash').mockImplementationOnce(() => {
    throw new Error()
  })
  const promise = sut.encrypt('any_value')
  await expect(promise).rejects.toThrow()
})
o0lyfsai

o0lyfsai2#

这对我很有效:

const hashSpy = jest.spyOn(bcrypt, "hash") as unknown as jest.Mock<
      ReturnType<(key: string) => Promise<string>>,
      Parameters<(key: string) => Promise<string>>
    >;
hashSpy.mockResolvedValueOnce("hashedPassword");
gudnpqoy

gudnpqoy3#

这对我很有效:

const hashSpy = jest.spyOn(bcrypt, 'hash') as unknown as jest.Mock<
ReturnType<(key: Error) => Promise<Error>>,
Parameters<(key: Error) => Promise<Error>>
>
hashSpy.mockReturnValueOnce(new Promise((resolve, reject) => reject(new Error())))
xxls0lw8

xxls0lw84#

我设法解决了一个类似的问题,把类型在SpyOn:

jest.spyOn<any, string>(bcrypt, "hash")
      .mockReturnValueOnce(
        new Promise((resolve, reject) => reject(new Error()))
      );

相关问题