Javascript 只有一个失败的断言后,测试才会停止

Javascript 只有一个失败的断言后,测试才会停止,javascript,unit-testing,continuous-integration,yui,assertions,Javascript,Unit Testing,Continuous Integration,Yui,Assertions,我来自QUnit的背景(多年来我一直很高兴使用它)。在我当前的项目中,YUI是一个可供选择的框架,因此使用YUI.Test进行单元测试是合理的 我正在使用3.4.0版。 不幸的是,我遇到了一些意想不到的“特性”。根据文件: “注意:尽管此示例显示多个断言失败,但一旦一个断言失败,测试将立即停止,导致跳过所有其他断言。” 我习惯于在有意义的测试名称下对断言进行分组。如果我有5个断言,其中2个没有通过,我希望在测试结果中看到这两个断言。如果在一个测试中有许多失败的断言,我不能一次修复所有这些断言。我

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

我正在使用3.4.0版。

不幸的是,我遇到了一些意想不到的“特性”。根据文件:

“注意:尽管此示例显示多个断言失败,但一旦一个断言失败,测试将立即停止,导致跳过所有其他断言。”

我习惯于在有意义的测试名称下对断言进行分组。如果我有5个断言,其中2个没有通过,我希望在测试结果中看到这两个断言。如果在一个测试中有许多失败的断言,我不能一次修复所有这些断言。我必须“修复”第一个重新测试,找到另一个。。。“修复”并重新测试。。。等等

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

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

是否有其他方法解决此问题

感谢您的帮助!谢谢!

您想做的(以及我们在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
名称下。单个测试的名称应该是一个简单的、可读的描述,描述您正在测试的特定功能,并且应该只针对该功能进行断言单独使用功能。

您想要做的(以及我们在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
名称下。单个测试的名称应该是一个简单的、可读的描述,描述您正在测试的特定功能,并且应该只针对该功能进行断言特性本身。

我认为您的解决方案就是这个问题的答案。尝试在每个测试中使用一个断言,这会使它们变得小而易于理解。每个断言都有自己的设置/拆卸。我认为您的解决方案就是这个问题的答案。尝试在每个测试中使用一个断言,这会使它们小而易于理解。并且每个断言都有一个assertion有自己的设置/拆卸。是的,我必须稍微改变一下我的习惯:)我希望这个问题对将来遇到这个问题的人有所帮助。是的,我必须稍微改变一下我的习惯:)我希望这个问题对将来遇到这个问题的人有所帮助。