在Chrome

时间:2016-01-07 09:20:57

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

更新2:

在忘记这一周(和生病)之后,我仍然不在这里。唯一的消息是我在Safari和Firefox中重新进行测试,现在Safari总是在这些测试中失败,而Firefox总是超时。我假设我已经在某处改变了某些东西,但我不知道在哪里。

我也越来越确定某个地方会出现时间问题。可能只是代码在不应该的地方进行异步,但更可能的是它被中断了。

更新

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

TL; DR:

我使用Karma(使用Webpack和Babel)在Chrome中运行测试,其中大多数都很好,但由于某些原因,7次测试会出现间歇性故障。

详细信息:

原来如此!上班! 当我在调试选项卡中运行它时,六个第一次测试MOSTLY成功,并且MIGHT失败。但是,正常运行时失败百分比似乎更高。这六个测试是相关的,因为它们在运行特定方法后都会失败,该方法对某些Backbone模型起到安全删除()的作用。基本上它意味着检查并清除()模型中要删除的所有链接模型,如果它不能这样做则返回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

1 个答案:

答案 0 :(得分:0)

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