开玩笑-更改模拟实现不起作用

时间:2020-07-02 08:43:39

标签: javascript jestjs

我在api.js中有一个__mocks__/api.js的模拟文件,具有以下默认实现:

export function api() {
  return {
    systemInfo: jest.fn(() => Promise.resolve({ system_info: { mi_workers_count: 3 } }))
  }
}

但是我想在一个测试中更改此默认行为,因此我尝试按照以下无效的方法进行操作:

import { api as mockApi } from "__mocks__/api" //tried also from original impl. file "api"

test("something", async () => {
  console.log(mockApi().systemInfo.getMockImplementation()())
  mockApi().systemInfo.mockImplementationOnce(() => 
    Promise.resolve({ system_info: { mi_workers_count: 1 } })
  )
  console.log(mockApi().systemInfo.getMockImplementation()())
})

console.log都将返回相同的,在__mocks__/api中实现的原产地承诺响应

1 个答案:

答案 0 :(得分:0)

为此,应该在定义的范围之外访问间谍。由于它是在api内定义的,因此mockApi().systemInfo !== mockApi().systemInfo无法做到。

间谍可以单独导出:

export const mockSystemInfo = jest.fn(() => Promise.resolve({ system_info: { mi_workers_count: 3 } }));

export function api() {
  return {
    systemInfo: mockSystemInfo
  }
}

可以通过以下方式更改实现:

mockSystemInfo.mockImplementationOnce(...)