似乎如果我尝试从always.afterEach()
函数中执行异步操作(或者只是缓慢?),则当测试失败时,进程不会等待它完成。我的具体情况是,我在每次测试后都尝试进行一些数据库清理,即使afterEach
钩子被调用,它似乎也没有机会在进程退出之前完成。
我试图将其提炼成一个简单的例子:
import test from 'ava'
test.afterEach.always('CLEANUP', async t => {
console.log('START', t.title)
await new Promise(resolve => setTimeout(resolve, 5000))
console.log('END', t.title)
})
test('Test', async t => {
console.log('START', t.title)
t.plan(1)
t.is(1, 2)
console.log('END', t.title)
})
这是我得到的输出:
START Test
END Test
✖ Test 1 === 2
START CLEANUP for Test
1 test failed [10:42:18]
1. Test
AssertionError: 1 === 2
_callee2$ (cleanup-test.js:15:5)
Test.fn (cleanup-test.js:11:1)
我希望看到END CLEANUP
打印(测试通过时确实会发生这种情况。
我是服务器端 JS 的新手,所以我希望我只是在做一些愚蠢的事情。
更新:事实证明,这只在设置失败快速标志时才会中断。这可能是一个错误。