【发布时间】:2016-10-07 11:52:14
【问题描述】:
我遇到了这个问题,因为我创建了一堆新的指令测试(在 JHipster 项目中)。业力单元测试由 grunt 任务执行。 我想清楚地强调我的问题与我在 GitHub 上发现的这两个(以及一些我不允许发布的其他问题)不同:
https://github.com/karma-runner/karma/issues/1077
https://github.com/karma-runner/karma/issues/393
不同之处在于,karma 永远不会执行完测试,而是会一直循环运行它们,就好像在配置的位置有无限数量的测试一样。在命令行输出中可以很清楚的看到:
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 组件更新到最新版本,但这并没有改变无限循环。
现在我完全没有想法了。有没有人遇到过这种奇怪的行为和控制台输出?
【问题讨论】:
-
今天我们开始发生同样的事情 - 我想知道是否有释放 karma/jasmine/someOtherDependency 可能导致这种情况?
-
一定是巧合,我们同时遇到了同样的问题!请参阅下面的答案,了解我们如何解决此问题。
-
FWIW,我在 Angular 6 中遇到了同样的问题。错误的测试是一个对话框打开。到目前为止,我们只是摆脱了这个测试,但它并没有解释死循环的根本原因......