为什么如果我创建了一个模拟我仍然会出错?

Why if i created a mock i am still getting error?

我正在做测试,我在那个测试中做了一个测试我为一个假函数创建了一个模拟

jest.mock('@/services/myService', ()=>({getAvailables: jest.fn().mockReturnValue()}))

在我的组件中运行那个函数

 onMounted(async () => {
        const answer = await getAvailables1()
        const answer = await getAvailables2()
        const answer = await getAvailables3()

但我仍然收到此错误

(node:81921) UnhandledPromiseRejectionWarning: TypeError: (0, _ContractService.getAvailables1) 不是函数 (节点:81921)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。这个错误要么是在没有 catch 块的情况下在异步函数内部抛出,要么是因为拒绝了一个没有用 .catch() 处理的承诺。要在未处理的承诺拒绝时终止节点进程,请使用 CLI 标志

如果我像这样先放 getAvailables2

 onMounted(async () => {
            const answer = await getAvailables2()
            const answer = await getAvailables1()

我收到这个错误 (节点:81921)UnhandledPromiseRejectionWarning:TypeError:(0,_ContractService.getAvailables2)不是函数

如果我像这样先放 getAvailables3

 onMounted(async () => {
            const answer = await getAvailables3()
            const answer = await getAvailables2()

我收到这个错误 (节点:81921)UnhandledPromiseRejectionWarning:TypeError:(0,_ContractService.getAvailables3)不是函数

我也尝试 mockResolvedValue,但没有用

export const getAvailables = async () => {
  let response
  let error
  try {
    response = await getData()
  } catch (err) {
    error = err
    throw err
  }
  return { response, error }
}

getAvailables() 是始终 return 承诺的异步函数。

因此,为了模拟该函数,您需要 return 具有成功或拒绝值的模拟承诺。

以下是模拟 return 成功承诺的函数的示例。

jest.mock('@/services/myService', () => ({
   getAvailables: jest.fn().mockResolvedValue(true)
}))

看起来你想要一个 mock partial:

jest.mock('@/services/myService', () => {
  const originalModule = jest.requireActual('@/services/myService');

  return {
    __esModule: true,
    ...originalModule,
    getAvailables1: () => Promise.resolve({ foo: 'bar' }),
    getAvailables2: () => Promise.resolve({ foo: 'baz' }),
    getAvailables3: () => Promise.resolve({ foo: 'bad' }),
    /* any other method of your service that gets called */
  };
});

这将在模拟中模拟提供的功能,而服务的其余部分将像原始服务一样运行。