【问题标题】:Getting intermittent failures of tests in Chrome在 Chrome 中获得间歇性测试失败
【发布时间】:2016-04-11 14:53:10
【问题描述】:

更新 2:

在忘记这件事一周(并且生病)之后,我仍然无法理解。唯一的消息是我在 Safari 和 Firefox 中重新运行了测试,现在 Safari 在这些测试中总是失败,而 Firefox 总是超时。我想我在某个地方改变了一些东西,但我不知道在哪里。

我也越来越确定某处存在时间问题。可能只是代码在不应该的地方异步,但更有可能是被中断了。

更新:

我对查找实际错误不太感兴趣,而对为什么它是间歇性的更感兴趣。如果我能找出原因,我可能会找到错误,或者至少重写代码以避免它。

TL;DR:

我正在使用 Karma(带有 Webpack 和 Babel)在 Chrome 中运行测试,其中大部分都很好,但由于某种原因,7 个测试会间歇性失败。

详情:

所以!去工作! 当我在调试选项卡中运行它时,前六个测试大多成功,但可能会失败。但是,正常运行时失败百分比似乎更高。这六个测试是相关的,因为它们在运行特定方法后都会失败,该方法对于某些 Backbone 模型来说是安全的 delete()。基本上,它的目的是检查并清除()要删除的模型中的所有链接模型,如果它不能这样做,则返回 false。 如果失败率为 100%,我相信我会发现错误并消除它,但我唯一知道的是它与尝试访问或更改已被删除的模型有关,这看起来像这是一个时间问题...?有些东西正在异步运行,但也许不应该......?我不知道如何解决它...

第七个测试要容易一些。它使用 Jasmine-Jquery 来检查一个 dom 元素(开始为空)在我更改某些内容后是否在内部获得另一个 div。它旨在测试 Bootstrap 的警报系统是否正确实施,但已被大量简化以试图找出它失败的原因。如果我将它作为 gulp 任务运行,此测试总是会失败,但如果我打开调试选项卡并手动重新运行测试,它总是会成功。所以我的假设是Chrome第一次没有正确渲染DOM,但是如果我在调试选项卡中重新运行它会修复它......?

TMI:

当我说我打开调试选项卡并手动重新运行测试时,当然,我仍然在同一个“gulp 测试”任务中。我还使用了“gulp testonce”,但唯一的变化是它启用了 singleRun 并启用了 HTML 报告器。它显示了完全相同的模式,尽管我无法在那里检查调试页面,因为浏览器在测试后退出。

使用 html 报告器的前 6 个测试之一的输出。

Chrome 47.0.2526 (Mac OS X 10.11.2) model library: sentences: no longer has any elements after deleting the sentence and both elements FAILED Error: No such element at Controller._delete (/Users/tom/dev/Designer/test/model.spec.js:1344:16 <- webpack:///src/lib/controller.js:107:12) at Object.<anonymous> (/Users/tom/dev/Designer/test/model.spec.js:143:32 <- webpack:///test/model.spec.js:89:31)

使用 html 报告器的测试 7 的输出。

Website tests &raquo; Messaging system Expected ({ 0: HTMLNode, length: 1, context: HTMLNode, selector: '#messagefield' }) not to be empty. at Object.&lt;anonymous&gt; (/Users/tom/dev/Designer/test/website.spec.js:163:39 &lt;- webpack:///test/website.spec.js:109:37)

现在,您应该知道的第一件事是,我当然尝试过其他浏览器,但 Safari 的模式与 Chrome 完全相同,而 Firefox 给我同样的错误,但错误消息最终占用了 80MB 的磁盘空间我的 html 记者还有很多时间来完成,如果它甚至完成的话。大多数时候它只是断开连接 - 最终速度更快。 所以我最终只使用 Chrome 来尝试找到这个特定的错误,它已经困扰了我一周的梦想。

来源

测试: https://dl.dropboxusercontent.com/u/117580/model.spec.js.html https://dl.dropboxusercontent.com/u/117580/website.spec.js.html 测试输出(由于错误是间歇性的,这只是一个例子):https://dl.dropboxusercontent.com/u/117580/output.html

【问题讨论】:

  • 也显示测试代码可能是个好主意 :)
  • 我正在尝试找到一种上传它们的方法,但我可能会将它们转储到 Dropbox。
  • 嘿,我最近遇到了这个问题。我有一个错过的服务间谍,如果另一个测试先运行,它就可以工作。

标签: javascript jquery backbone.js jasmine karma-runner


【解决方案1】:

好的,现在所有测试都成功了。我认为这是答案: 有些测试称为控制器,有些测试称为window.controller。这包括一些 reset() 和 remove() 命令。 改写后还是失败了,于是又改写了。作为重写的一部分,我决定通过 window.* 进行所有调用,然后重写所有测试成功。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-27
    • 1970-01-01
    • 2018-11-11
    • 2018-11-09
    • 2019-04-18
    • 2011-10-21
    • 1970-01-01
    相关资源
    最近更新 更多