【问题标题】:Can YUI3 Test asserts display the line number of failure?YUI3 测试断言可以显示失败的行号吗?
【发布时间】:2012-04-20 22:51:06
【问题描述】:

我刚开始使用 YUI3 测试模块 (http://yuilibrary.com/yui/docs/test/)。

我的测试用例包含许多验证状态的断言。如果其中一个断言失败,则 TestConsole 指示断言失败,但不指示测试中的许多断言中的哪一个失败。让失败消息报告行号会很棒。

浏览器异常实际上包含了JS失败的行号,但是YUI3的Test类过滤掉了这个并抛出了自己的异常,这个异常似乎不包含行号。有没有一种简单的方法来添加此报告,同时仍然利用 YUI3 测试类作为工具??

【问题讨论】:

    标签: yui yui3


    【解决方案1】:

    我将从 tl;​​dr 开始

    YUI3 不提供任何内在的方式来显示失败测试的行号。我想可以操纵 Error 构造函数以便您可以询问它们;但是,问题是 Error.lineNumber 仅在某些浏览器中受支持(我相信它仅限于 Mozilla)。

    即使这确实有效,您最终也会意识到这有点令人费解。您必须始终确保这样做:

    throw new Error*(...);
    

    在您的调用代码中,您总是需要这样做:

    try {...} catch(e) { /* e.lineNumber */ }
    

    即使这一切都奏效并且你愿意这样做,我也不会推荐它。

    真正的答案

    问题的根源在于您的测试方法中似乎有多个断言。试图务实的开发人员有时会告诉您“每个测试方法一个断言”是不合理和教条的。认为每个测试方法可以有多个断言是非常有吸引力的......直到它不是。

    我确信有时多个断言会更好,但我还没有看到。我已经测试多年了,这就是我发现的:

    1. 我尝试了每个方法的多个断言,但每次我都被不知道哪个断言失败的问题所困扰。这里没有货物崇拜……我都试过了,两种方法中,只有一种没有咬我。
    2. 每个测试一个断言会迫使您真正考虑测试什么/如何测试。

    阅读:

    【讨论】:

      猜你喜欢
      • 2021-10-25
      • 1970-01-01
      • 2016-04-21
      • 1970-01-01
      • 1970-01-01
      • 2017-04-10
      • 2020-10-08
      • 1970-01-01
      • 2020-01-29
      相关资源
      最近更新 更多