Karma单元测试在无限循环中反复运行

时间:2016-06-07 14:08:52

标签: angularjs karma-runner

我遇到了这个问题,因为我创建了一堆新的指令测试(在JHipster项目中)。业力单元测试由一项艰巨的任务执行。 我想清楚地强调我的问题与我在GitHub上找到的这两个(以及其他一些我不被允许发布的)不同:

https://github.com/karma-runner/karma/issues/1077

https://github.com/karma-runner/karma/issues/393

不同之处在于业力永远不会在执行测试时完成,而是继续在循环中运行它们,就像在配置的位置中存在无限数量的测试一样。它可以在命令行输出中清楚地看到:


Firefox 45.0.0 (Windows 7 0.0.0): Executed 321 of 192 (skipped 7) SUCCESS (0 secs / 1 min 3.757 secs)
Chrome 51.0.2704 (Windows 7 0.0.0): Executed 399 of 192 (skipped 11) SUCCESS (0 secs / 1 min 2.239 secs)
PhantomJS 2.1.1 (Windows 7 0.0.0): Executed 444 of 192 (skipped 11) SUCCESS (0 secs / 1 min 0.515 secs)

它会永远持续下去。经过近一个小时的执行,结果就是:


Chrome 51.0.2704 (Windows 7 0.0.0): Executed 20171 of 192 (skipped 472) SUCCESS (0 secs / 50 mins 7.281 secs)
Firefox 45.0.0 (Windows 7 0.0.0): Executed 3186 of 192 (skipped 72) DISCONNECTED (14 mins 48.503 secs / 12 mins 16.547 secs)
PhantomJS 2.1.1 (Windows 7 0.0.0): Executed 27054 of 192 (skipped 611) DISCONNECTED (48 mins 25.253 secs / 47 mins 34.776 secs)

无论测试是通过还是失败,或者它们失败的原因(TypeError, ReferenceError...)无关紧要,测试无论如何都会永远运行(所有测试都会在这里传递,如您所见)。只有在命令行中停止grunt任务时才会停止执行。

过去几个月中,Karma配置和grunt任务没有改变。 Singlerun和autowatch设置(以及任何其他设置)无关紧要。

正在测试的代码似乎无关紧要。一些变化,他们让问题消失了一段时间,但是当我写新的测试时,它总会回来。当然我起初认为我的代码是责任,但以下内容将说明为什么它不是一个合乎逻辑的结论。

奇怪的行为总是在创建新测试时开始,但测试代码本身似乎无关紧要,因为新测试从不使用任何特殊操作或覆盖其他测试所没有的组件。此外,即使新测试是一个完全空的函数体,它仍然会导致奇怪的行为,这表明它不是程序中的新决策路径,当测试覆盖时会导致问题。这就是为什么我不相信代码是责任。 我还设法通过关闭随机测试(我们很久以前使用没有任何问题)来阻止无限执行,但是当我添加新测试时,问题总是会回来。

环境无关紧要。测试在我的Windows机器和Linux服务器上的CI中无限运行。

我还认为这可能是一个内存限制问题,因为有一段时间,浏览器在与新功能或新测试无关的某个测试中崩溃(并且已经工作好几个月了)。当我关闭那个测试时,问题停止了一段时间,但后来再次回来(因为我一直在写测试)。

我将所有NPM软件包和Bower组件更新到最新版本,但这并没有改变无限循环。

到现在为止,我完全没有想法。有没有人遇到过这种奇怪的行为和控制台输出?

1 个答案:

答案 0 :(得分:9)

我们刚刚解决了这个问题。问题是我们的应用程序中有一个注销功能,可以在将浏览器重定向到另一个页面之前执行各种任务。我们在logout函数中添加的一个测试是没有模拟window.redirect调用,当这是从karma测试运行时执行它导致循环行为。

在模拟/监视此调用之后,循环行为停止。

不确定这是否与您遇到的问题相同,但希望此信息可以为您提供帮助!

相关问题