【问题标题】:YUI.Test tests stops after ONLY ONE failed assertionYUI.Test 测试在只有一个失败的断言后停止
【发布时间】:2013-08-09 07:57:09
【问题描述】:

我来自 QUnit 背景(多年来我一直很高兴使用它)。在我当前的项目中,YUI 是一个选择框架,因此使用 YUI.Test 进行单元测试是合理的。

我使用的是 3.4.0 版。

不幸的是,我遇到了一些意想不到的“功能”。根据文档http://yuilibrary.com/yui/docs/test/#assertions

“注意:尽管此示例显示多个断言失败,但只要一个断言失败,测试就会停止,从而导致跳过所有其他断言。”

我习惯于在有意义的测试名称下对断言进行分组。如果我有 5 个断言并且其中 2 个失败,我想在测试结果中看到这两个。如果单个测试中有许多失败的断言,我无法一次修复所有断言。我必须“修复”第一个restest,找到另一个……“修复”并重新测试……等等。

当我在本地环境中时,这没什么大不了的。这个问题在持续集成环境中开始变得严重。我不想为每个失败的断言运行构建(在 Bamboo/Jenkins 上)。如果我在一个 TestCase 中有多个测试(这很有可能......),那将是一场噩梦,我的团队将在一天后杀死......

目前我正在使用“解决方法”...每个测试只有一个断言:(这意味着很多测试...

还有其他方法可以解决这个问题吗?

感谢您的帮助!谢谢!

【问题讨论】:

  • 我会说你的解决方法就是这个问题的答案。尝试在每个测试中使用一个断言,这会使它们变得小而易于理解。每个断言都有自己的设置/拆卸。

标签: javascript unit-testing continuous-integration yui assertions


【解决方案1】:

您想要做的(以及我们在 YUI 中自己的测试中所做的)是将您的不同测试分组到一个 Y.Test.Case 下。这是一个示例,取自 Y.ArraySort 中的测试:

var ArrayAssert = Y.ArrayAssert,

    suite = new Y.Test.Suite('ArraySort');

    suite.add(new Y.Test.Case({
        name: 'compare()',

        'should compare numbers': function () {
            var array = [2,1,3,5,4];
            array.sort(Y.ArraySort.compare);
            ArrayAssert.itemsAreSame([1,2,3,4,5], array, "Expected sorted numbers.");
        },

        'should compare strings': function () {
            var array = ["caa", "baa", "bba", "aba", "cba", "aaa", "abc"];
            array.sort(Y.ArraySort.compare);
            ArrayAssert.itemsAreSame(["aaa","aba","abc","baa","bba","caa","cba"], array, "Expected sorted strings.");
        },

        'should compare mixed alpha and numeric strings': function() {
            var array = ["attic", "Aardvark", "1", "0", "Zoo", "zebra"];
            array.sort(Y.ArraySort.compare);
            ArrayAssert.itemsAreSame(["0", "1", "Aardvark","attic","zebra","Zoo"], array, "Expected sorted mixed strings.");
        }
    }));

如果一个断言失败,Y.Test.Case 内的每个测试都应该失败,您应该将相关测试分组到一个 Y.Test.Case 名称下。单个测试的名称应该是简单易读的描述,描述您正在测试的特定功能,并且应该仅针对该功能进行断言。

【讨论】:

  • 是的,我必须稍微改变一下我的习惯 :) 如果将来有人遇到这个问题,我希望这个问题会有所帮助。
猜你喜欢
  • 2016-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-16
  • 1970-01-01
  • 2011-08-04
相关资源
最近更新 更多