我在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
中实现的原产地承诺响应
答案 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(...)