YUI.Test测试仅在一次失败的断言后停止

时间:2013-08-09 07:57:09

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

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

我使用的是3.4.0版本。

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

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

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

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

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

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

感谢任何帮助!谢谢!

1 个答案:

答案 0 :(得分: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名称下对相关测试进行分组。单个测试所具有的名称应该是一个简单的,人类可读的描述,描述您正在测试的特定功能,并且只能单独声明该功能。