如何让QUnit在异常上打印回溯?

时间:2012-04-01 20:35:35

标签: javascript unit-testing qunit

当我的QUnit测试中发生异常时,它会说

Died on test #n: message

如何让它打印回溯或其他位置信息,以便我可以看到发生异常的位置?

2 个答案:

答案 0 :(得分:5)

我不认为有可能让QUnit为您提供错误发生位置的跟踪。您的代码生成了一个异常,QUnit已捕获并报告该异常。如果勾选QUnit结果顶部的“notrycatch”复选框,您的测试将再次运行,但这次QUnit不会捕获异常。然后,您的浏览器可能会向您提供有关实际发生情况的更多信息,但这取决于错误是什么。

答案 1 :(得分:0)

修改 在回答这个问题时,我怀疑这不是你想问的问题。所以我编辑了答案来展示这个,可能更有用的部分,首先:

因为你写了“当我的QUnit测试中发生异常时”,让我更深入地解释一下测试的概念:

首先:您的QUnit测试中不会发生异常,但是在您的代码中也是如此。好消息是:qUnit在您的情况下正在做它应该做的事情:它测试您的代码,并且由于您的代码有问题,您的代码在测试时会引发异常。

由于qUnit是一个测试环境,因此它不负责提供异常回溯。只有在那里检查您实现的功能是否按预期的方式工作,而不是跟踪错误。出于这种目的,像FireBug或Safari的开发人员工具更适合。

让我描述一个场景:

  1. 你写了一个函数
  2. 你用(即)FireBug
  3. 消除它的错误
  4. 你写了一个qUnit测试用例来证明这个函数确实做了什么 你希望它做什么 - 测试通过
  5. (现在它变得有趣,因为这是测试的真正含义 for)你为你的函数添加一些额外的功能,因为 需要
  6. 如果你做的一切都是正确的,你的测试就会通过,你可以做到 确保一切都会按预期继续工作,因为他们确实如此 (如果你写得很好)
  7. 总结一下:测试不是用于调试,而是用于确保事情按照您认为的方式工作。如果出现错误,您不会编写测试来解决它,但是写一个测试来重现它。然后你找到bug,删除它,测试将通过。如果稍后重新发现错误(即由于代码更改),测试将再次失败,并且您立即知道错误已经恢复。

    通过建立测试驱动开发可以进一步实现这一点,在编写功能本身之前编写测试。然后上面的场景将改为:

    1. 您编写了一个测试,描述了代码的预期结果
    2. 你编写代码,当出现错误时你跟踪它们(即。) 萤火虫
    3. 在进行中,一个接一个的测试将开始传递
    4. 添加其他功能时,首先要另外编写 测试
    5. 这样做有两个主要优点:

      1. 您可以确定自己有必要的测试和
      2. 你被迫确切地确定你希望你的代码做什么, 因为否则你不能写测试。
      3. 快乐的测试。

        编辑结束 - 原始答案如下,以防万一需要。

        使用QUnit时,我强烈建议您遵循jQuery文档网站http://docs.jquery.com/Qunit上显示的方法:

          

        要使用QUnit,您必须包含其qunit.js和qunit.css文件   提供用于显示测试结果的基本HTML结构:

        您所要做的就是加载qunit.js和qunit.css文件,然后将此代码段放到您的页面中,以获得有关测试过程的可视反馈:

        <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 test results

        要自定义qUnit显示的错误消息,您只需将要显示的字符串附加到测试中。而不是

        ok($('.testitem:first').is(':data(droppable)'))
        

        使用

        ok($('.testitem:first').is(':data(droppable)'),
            "testitem is droppable after calling setup_items('.testitem')");
        

        获取图片中显示的错误消息。否则qUnit会回退到与使用过的测试相关的一些标准错误消息。