【发布时间】:2020-06-15 16:28:00
【问题描述】:
我试图模拟被拒绝的值并得到这个错误。奇怪的是,这种构造在“成功”addUser.mockImplementation(value => jest.fn().mockResolvedValue(value)) 的情况下有效,但是当我尝试对拒绝执行相同的技巧时,它不起作用并显示“无法读取 null 的属性‘createEvent’”
这是我的测试用例
it('receives invalid value and throws an error', async () => {
addUser.mockImplementation(() =>
jest.fn().mockRejectedValue(new Error('Sample error'))
)
const enqueueSnackbar = jest.fn()
useSnackbar.mockReturnValue({ enqueueSnackbar })
const { emailInput, form, submitButton } = setup()
await act(async () => {
fillIn(emailInput, 'sample@mail.com')
})
expect(emailInput.value).toBe('sample@mail.com')
expect(submitButton).toHaveProperty('disabled', false)
await act(async () => {
fireEvent.submit(form)
})
expect(enqueueSnackbar).toHaveBeenCalledTimes(1)
expect(enqueueSnackbar).toHaveBeenCalledWith(`Sample error`, {
variant: 'error'
})})
有谁知道如何让它工作?
【问题讨论】:
-
真正的
addUser函数长什么样子?看起来你可能想要adduser.mockImplementation(() => Promise.reject(new Error('Sample error'))),这意味着“当调用添加用户时,返回一个带有示例错误的被拒绝承诺”,而当前的测试代码意味着“当调用添加用户时,返回一个函数,当它被调用时,返回一个带有示例错误的被拒绝承诺”。我猜你想要第一个,但如果没有看到addUser函数就很难知道。 -
或
addUser.mockRejectedValue(new Error('Sample error'))与addUser.mockImplementation(() => Promise.reject(new Error('Sample error')))相同 -
我遇到了同样的问题,我认为由于重复了 act 函数而引发了错误。如果我只用一个动作离开我的测试,它不会崩溃(问题是我需要使用两次动作)。有可能吗?
标签: jestjs react-testing-library