2

假设您正在构建一个框架 Foobar,并假设 Foobar 有一个函数 .coolstuff(),它会调用 IndexedDB 调用 .coolstuff2() 和 .coolstuff3(),当这两个都完成时,事务调用 .coolstuff4()。

随意混合和匹配上面的内容,通过在一些 for 循环中围绕各种项目进行良好的度量,以及不同层次的异步性。

现在您想编写一些单元测试来测试 Foobar。您首先编写一个将一些参数传递给 Foobar 的测试,然后启动一些很酷的东西。在各个阶段,您可能希望使用 sinon.js(或其他框架)将钩子附加到某些特定的coolstuff 函数上,以在 IndexedDB 上进行项目计数或检查 dom 等。尽管可能难以计算各种时间,但您还是这样做了.coolstuffX() 已被调用,以便在正确的阶段进行拦截以进行必要的检查。

你很满意。测试以您想要的结果结束。现在是时候运行 unittest 2 了。

但是, .coolstuffXYZ() 尚未完成异步调用单元测试 1 所需的任何内容。这将干扰单元测试 2。

如此短的依赖于测试后的计时器(混乱)......或拦截 Foobar 中的每一个函数进行单元测试,这样当你说你的测试结束时它实际上结束了(更混乱,并且无法保证)。

有没有办法关闭相关测试的数据库连接并等待所有 IndexedDB 事务完成......在开始下一个测试之前?[修辞,因为我怀疑没有]

还是我必须找到一种方法在不同的 javascript 上下文中运行每个测试?无论哪种方式,似乎都很混乱/棘手。吐槽一下。

4

1 回答 1

3

我在 indexeddb 之上构建了一个库。该框架的核心功能主要由单元测试覆盖。如果您想看看我是如何做到的,请访问http://users.telenet.be/kristofdegrave/test/。我使用 QUnit 作为测试库。

我要做的是在第一个测试完成后开始下一个测试。对于每个测试,我都会清理以前的情况并从新的数据库情况开始。我通过在运行测试之前删除数据库来做到这一点,并创建一个包含测试初始情况的新数据库。这样测试可以独立运行,不会相互影响。

于 2012-10-17T06:56:55.670 回答