假设您正在构建一个框架 Foobar,并假设 Foobar 有一个函数 .coolstuff(),它会调用 IndexedDB 调用 .coolstuff2() 和 .coolstuff3(),当这两个都完成时,事务调用 .coolstuff4()。
随意混合和匹配上面的内容,通过在一些 for 循环中围绕各种项目进行良好的度量,以及不同层次的异步性。
现在您想编写一些单元测试来测试 Foobar。您首先编写一个将一些参数传递给 Foobar 的测试,然后启动一些很酷的东西。在各个阶段,您可能希望使用 sinon.js(或其他框架)将钩子附加到某些特定的coolstuff 函数上,以在 IndexedDB 上进行项目计数或检查 dom 等。尽管可能难以计算各种时间,但您还是这样做了.coolstuffX() 已被调用,以便在正确的阶段进行拦截以进行必要的检查。
你很满意。测试以您想要的结果结束。现在是时候运行 unittest 2 了。
但是, .coolstuffXYZ() 尚未完成异步调用单元测试 1 所需的任何内容。这将干扰单元测试 2。
如此短的依赖于测试后的计时器(混乱)......或拦截 Foobar 中的每一个函数进行单元测试,这样当你说你的测试结束时它实际上结束了(更混乱,并且无法保证)。
有没有办法关闭相关测试的数据库连接并等待所有 IndexedDB 事务完成......在开始下一个测试之前?[修辞,因为我怀疑没有]
还是我必须找到一种方法在不同的 javascript 上下文中运行每个测试?无论哪种方式,似乎都很混乱/棘手。吐槽一下。