【发布时间】:2019-10-27 01:45:06
【问题描述】:
我有一个等待多个承诺的函数
const function = async () => {
await function1()
await function2()
await function3()
}
我想测试一下是否调用了function3:
it(('calls function3', async () => {
jest.spyOn(api, 'function1').mockResolvedValue({})
jest.spyOn(api, 'function2').mockResolvedValue({})
spy = jest.spyOn(api, 'function3')
await function()
expect(spy).toBeCalledTimes(1)
})
这个测试失败了,但是当我多次调用 await 时:
it(('calls function3', async () => {
jest.spyOn(api, 'function1').mockResolvedValue({})
jest.spyOn(api, 'function2').mockResolvedValue({})
spy = jest.spyOn(api, 'function3')
await await await await await function()
expect(spy).toBeCalledTimes(1)
})
测试将通过。为什么是这样? await function() 不应该在进入下一个期望行之前解决所有的承诺吗?
编辑:awaited 函数越深,即 function4,我需要的 await 语句越多,但不是 1 比 1。
【问题讨论】:
-
function是javascript保留字,你确定你的函数声明没有报错吗? -
@Dario 抱歉,这是一个示例,而不是实际代码
标签: javascript reactjs ecmascript-6 jestjs enzyme