涉及异步代码的失败测试会在任意条件下失败

时间:2019-04-17 07:52:50

标签: javascript asynchronous async-await jestjs

在我正在研究的新代码库上使用jest进行测试时,遇到了一个有趣的场景。

我研究了开玩笑的建议asynchronous testing,但我觉得它们没有考虑到从一个人调用的方法中触发异步代码的情况,因此使用了{ {1}}或返回诺言在这些情况下不起作用,因此创建了在某些诺言得以解决之前调用一些断言的情形。

在我的特定情况下,我也使用了moxios,但这仅在它存根axios要完成的实际工作并仍然返回承诺的意义上才有意义。

显而易见的解决方案是在做出断言之前允许短暂的延迟,这很好用。 readme详细介绍了问题和解决方案。

令人困惑的场景

但是问题是,如果我正确理解了问题,那么我希望所有这样的结构的测试都不会失败,不会拖延。

但是,

  • 虽然在使用done pass模式处理函数内部的诺言时使用then进行测试,而当使用catch {{ 1}}模式。
  • 这些测试fail在一个人单独运行测试时会运行,而在整个测试套件运行时都会失败-我知道:(
  • 最后,这些测试在某些开发人员的计算机上通过而在其他开发人员的计算机上失败,这通常使得很难发现问题所在
    更新: 这一特定原因是节点版本不同

问题

我基本上想知道是什么原因导致上述任何一种行为,以及是否缺少某些东西,因为它们看起来都那么武断。

1 个答案:

答案 0 :(得分:0)

这取决于使用相同DOM进行测试的竞争条件。