javascript - 在 Chrome 中获取间歇性测试失败

标签 javascript jquery backbone.js jasmine karma-runner

更新 2:

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

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

更新:

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

长话短说:

我正在使用 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

最佳答案

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

关于javascript - 在 Chrome 中获取间歇性测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34651369/

相关文章:

javascript - 如何在新版fancybox中默认隐藏标题

jquery - Bootstrap 2.2.1 中的弹出框

javascript - jquery 单选按钮 :checked and $(this). 父级

javascript - 如何使用和访问 Backbone.js 集合作为模型中的属性/属性?

javascript - 主干错误,对象 [对象全局] 没有方法 ...

javascript - 如何停止 JavaScript 数字除法中的 chop

php - 使用 jQuery 将背景图像 css 设置为 wordpress 中的特色图像

javascript - 鼠标滚轮移动时调用函数

json - 主干解析 json 响应

javascript - 如何在 Backbone/Underscore 上应用 jQuery timeago 或 easydate?