1

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

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

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

4

1 回答 1

0

我将从 tl;​​ 博士开始

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

即使这确实有效,您最终也会意识到这有点令人费解。您必须始终确保执行以下操作:

throw new Error*(...);

在您的调用代码中,您总是必须这样做:

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

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

真正的答案

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

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

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

阅读:

于 2012-05-05T16:26:57.267 回答