Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何保证单元测试序列的Indexeddb事务完成?_Indexeddb - Fatal编程技术网

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

如何保证单元测试序列的Indexeddb事务完成?,indexeddb,Indexeddb,假设您正在构建一个框架Foobar,并假设Foobar有一个函数.coolstuff(),该函数进行IndexedDB调用,调用.coolstuff2()和.coolstuff3(),当这两个函数都完成事务调用时,调用.coolstuff4() 您可以自由地将上述内容与您的心意进行混合和匹配,通过一些for循环,围绕各种项目进行良好的度量,并实现不同层次的异步性 现在您需要编写一些单元测试来测试Foobar。首先编写一个测试,将一些参数传递到Foobar,然后启动一些coolstuff。在不同的

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

您可以自由地将上述内容与您的心意进行混合和匹配,通过一些for循环,围绕各种项目进行良好的度量,并实现不同层次的异步性

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

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

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

在测试后如此缺乏对计时器的依赖(混乱)。。。或者拦截Foobar中的每个函数进行单元测试,这样当你说你的测试结束时,它实际上就结束了(梅西耶,这并不能保证)

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


或者我必须找到一种方法在不同的javascript上下文中运行每个测试吗?无论哪种方式看起来都很混乱/棘手。Rant结束。

我在indexeddb上构建了一个库。该框架的核心功能主要由单元测试覆盖。如果你想看看我是怎么做到的,去。我使用QUnit作为测试库

我要做的就是在第一次测试完成后开始下一次测试。对于每个测试,我都会清理前面的情况,并从一个新的数据库情况开始。为此,我在运行测试之前删除数据库,并使用测试的初始情况创建一个新数据库。这样,测试可以独立运行,并且
互不影响。

设计测试代码的老问题-依赖隔离!。。。当底层库很少考虑依赖性隔离时,这就更加困难了…:-(因此,TDD方法是先测试…先编写测试。在我解决了测试要解决的具体问题之后,我才发现它们失败了,并注意到它有时成功,有时失败。但是,你怎么知道在新测试开始之前是否有任何事务等待完成呢底层IndexedDB规范不允许您监听,因此您的框架不可能坐在上面监听它。(我的咆哮是对IndexedDB的批评)。您可以使用新的数据库实例启动第二个测试(我也这么做),但这不能保证旧的.onsuccess()函数将在新测试开始后启动,破坏您的计数/检查。顺便说一句,您发送给我的链接失败了许多测试(19、24、44)。Thanx 4回答:-)根据浏览器的不同,有几个测试失败,我知道:)。你仔细看过我测试的来源了吗?基本上我要做的就是先删除数据库。通过这种方式,我确信我将创建一个新的数据库。每次考试前我都这样做。注意:只有关闭与数据库的所有连接,才能删除数据库。因此,通过这种方式,您可以确定没有其他事务等待完成。除此之外,您还可以控制与数据库的所有连接。通过这种方式,您总是知道连接何时打开。我建议您在测试运行后关闭连接。啊!!那很好。编辑您的答案,澄清您的意思是删除整个数据库并重新创建它。我想你所说的清理只是指一个新的实例。。也许那是我的错,但我还是希望答案中多写一两行。。然后我会把它标记为正确的。请注意,规范声明关闭数据库并不保证事务以后不会继续完成。我想删除它就必须这样做。