【发布时间】:2018-07-17 06:49:24
【问题描述】:
假设我有一个函数执行异步操作 (doStuffAsync()),然后打算做一些其他事情 (doOtherStuff())。
doStuffAsync() 返回一个Promise。
还假设一切都是可模拟的。
如何在尝试 doOtherStuff() 之前测试我的函数是否等待 doStuffAsync()?
我曾想过使用resolve => setTimeout(resolve(), timeout) 模拟doStuffAsync(),但基于超时的测试看起来非常脆弱。
【问题讨论】:
-
您想测试
await关键字/承诺吗?在我看来,你应该测试你的代码,而不是语言特性。 -
不,我想测试我的函数在开始执行其他代码之前等待某些东西。
await doStuffAsync(); doOtherStuff();和简单的doStuffAsync(); doOtherStuff();之间存在行为差异。我想测试一下是否有await。 -
我确实知道存在行为差异,但我不知道您如何测试它:/ 个人而言,我不会测试它。如果你在做单元测试,你调用一个函数,你期望得到一个给定的结果。函数的内部行为与测试无关。
-
有趣的问题 ;) 我希望我们能看到一些好的答案!
-
我遇到了一个与不等待异步函数相关的非常实际的错误 -
doOtherStuff()导航到另一个屏幕,而我明确希望它仅在doStuffAsync()完成后发生。
标签: javascript unit-testing asynchronous promise async-await