此问题是由以下原因引起的:
.catch((error) => { assert.isNotOk(error,'Promise error'); done();});如果断言失败,它将引发错误。该错误将
done()永远不会被调用,因为代码在此之前出错。这就是导致超时的原因。
在 “未处理的承诺拒绝” 也由断言失败造成的,因为如果一个错误在被抛出
catch()的处理程序,
并没有后续的
catch()处理程序,错误将得到吞噬(说明这篇文章)。该
UnhandledPromiseRejectionWarning警告提醒你这个事实。
通常,如果要在Mocha中测试基于承诺的代码,则应依靠Mocha本身已经可以处理承诺的事实。您不应该使用
done(),而是从测试中返回一个承诺。摩卡咖啡然后会自己捕获任何错误。
像这样:
it('should transition with the correct event', () => { ... return new Promise((resolve, reject) => { ... }).then((state) => { assert(state.action === 'DONE', 'should change state'); }) .catch((error) => { assert.isNotOk(error,'Promise error'); });});


