如何保证Indexeddb事务完成单元测试序列?

时间:2012-10-16 21:54:33

标签: indexeddb

假设你正在构建一个框架Foobar,并假设Foobar有一个函数.coolstuff(),它使得调用了.coolstuff2()&的IndexedDB调用。 .coolstuff3(),当这两个都完成了事务调用.coolstuff4()。

随意将上述内容与您心中的内容混合搭配,通过一些for循环来围绕各种项目进行衡量,以及各种异步性。

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

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

但是,.coolstuffXYZ()还没有异步调用unittest 1所需的任何内容,这会干扰unittest 2.

在测试之后依赖计时器(凌乱)......或者拦截Foobar中的每一个功能进行单元测试,这样当你说你的测试结束时它实际上结束了(更麻烦,并且没有保证)。

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

或者我是否必须找到在不同的javascript环境中运行每个测试的方法?无论如何,似乎凌乱/棘手。咆哮。

1 个答案:

答案 0 :(得分:2)

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

我做的是在第一个测试结束时开始下一个测试。对于每个测试,我清理以前的情况并从新的数据库情况开始。我通过在运行测试之前删除数据库来执行此操作,并创建一个具有测试初始情况的新数据库。这样测试可以独立运行 互不影响。