【发布时间】:2012-04-01 20:35:34
【问题描述】:
当我的 QUnit 测试中发生异常时,它只会说
Died on test #n: message
如何让它打印回溯或其他一些位置信息,以便我可以看到异常发生的位置?
【问题讨论】:
-
最新的 QUnit 将输出它捕获的异常的源代码行,即使在 Safari 中也是如此,否则在生成堆栈跟踪方面非常糟糕。
标签: javascript unit-testing qunit
当我的 QUnit 测试中发生异常时,它只会说
Died on test #n: message
如何让它打印回溯或其他一些位置信息,以便我可以看到异常发生的位置?
【问题讨论】:
标签: javascript unit-testing qunit
我认为不可能让 QUnit 为您提供错误发生位置的踪迹。您的代码生成了一个异常,QUnit 已捕获并报告了该异常。如果您勾选 QUnit 结果顶部的“notrycatch”复选框,您的测试将再次运行,但这次 QUnit 不会捕获异常。然后,您的浏览器可能会为您提供有关实际发生情况的更多信息,但这取决于错误是什么。
【讨论】:
编辑: 在回答这个问题时,我产生了一个不是你想问的怀疑。所以我编辑了答案来展示这个,可能更有用的部分,首先:
因为您写的是“当我的 QUnit 测试中发生异常时”,所以让我更深入地解释一下测试的概念:
首先:异常不会出现在您的 QUnit 测试中,而是出现在您的代码中。 好消息是:在您的情况下,qUnit 正在做它应该做的事情:它测试您的代码,并且由于您的代码有问题,因此您的代码在测试时会引发异常。
由于 qUnit 是一个测试环境,它不负责提供异常回溯。它只是用来检查您实现的功能是否按照您期望的方式工作,而不是跟踪错误。对于这样的目的,像 FireBug 或 Safari 的开发者工具这样的工具更合适。
让我描述一个场景:
总结一下:测试不是为了调试,而是为了确保事情按照你认为的方式工作。如果出现错误,你不会编写测试来解决它,而是你写一个测试来重现它。然后你找到错误,删除它,测试就会通过。如果稍后重新发明错误(即由于代码更改),测试将再次失败,您立即知道错误又回来了。
这可以通过建立测试驱动开发来更进一步,您在编写功能本身之前编写测试。那么上面的场景会变成这样:
这样做有两个主要优点:
测试愉快。
edit end - 原始答案如下,以防万一。
当使用 QUnit 时,我强烈建议遵循 jQuery 文档站点 http://docs.jquery.com/Qunit 上显示的方法:
要使用 QUnit,你必须包含它的 qunit.js 和 qunit.css 文件,并且 提供用于显示测试结果的基本 HTML 结构:
你所要做的就是加载 qunit.js 和 qunit.css 文件,然后把这个 sn-p 放到你的页面上,以获得关于测试过程的视觉反馈:
<h1 id="qunit-header">QUnit example</h1>
<h2 id="qunit-banner"></h2>
<div id="qunit-testrunner-toolbar"></div>
<h2 id="qunit-userAgent"></h2>
<ol id="qunit-tests"></ol>
<div id="qunit-fixture">test markup, will be hidden</div>
这样做会生成一个整齐呈现的交互式控制台,显示有关测试结果的准确报告。每个测试都有一行显示它是否通过,单击该行会展开每个测试的结果。这看起来有点像这样:
要自定义 qUnit 显示的错误消息,您只需将要显示的字符串附加到您的测试中。所以不是
ok($('.testitem:first').is(':data(droppable)'))
使用
ok($('.testitem:first').is(':data(droppable)'),
"testitem is droppable after calling setup_items('.testitem')");
获取图片中显示的错误消息。否则 qUnit 会退回到与所用测试相关的一些标准错误消息。
【讨论】: