我一定不能正确理解某些内容。 根据阅读文档和我在网上看到的一些示例。我正在这样做:
// utils/handleError.js
export default () => {
return {
status: 'error'
}
}
// utils/index.js
export { default as handleError } from './handleError'
...
// auth.js
import { handleError } from './utils'
export default async (key) => {
if (!key) {
return handleError()
}
...
// more async stuff here
}
// auth.test.js
import auth from './auth'
import { handleError } from './utils'
// also tried importing it directly
// import handleError from './utils/handleError'
jest.mock('./utils')
describe('Auth', () => {
it('should error when no key present', async () => {
handleError.mockImplementation(() => Promise.resolve({ status: 'check'})
const res = await auth(false)
expect(auth.status).toBe('check')
})
})
我知道_.handleError.default.mockImplementation
不是一个函数。
我的目标是最终更改每个测试的handleError的返回值。 (我知道这是一个不好的例子,handleError可能永远不会改变。这里我仅以它为例)
当我明确嘲笑每个fn
jest.mock('./utils', () => ({
handleError: () => ({ status: 'poop' })
}))
像这样,它可以按预期工作,但是更改每个测试的返回值会与mockImplementationOnce()
之类的链相混淆。
我在这里误解了什么?测试handleError
时,应该如何正确模拟auth
及其返回?
谢谢大家!
答案 0 :(得分:0)
模拟每个测试的handleError
返回值是正确的。
您可以使用语法糖功能mockFn.mockResolvedValueOnce(value)来代替mockImplementationOnce
来进行快速模拟。