Javascript 只有一个失败的断言后,测试才会停止
我来自QUnit的背景(多年来我一直很高兴使用它)。在我当前的项目中,YUI是一个可供选择的框架,因此使用YUI.Test进行单元测试是合理的 我正在使用3.4.0版。 不幸的是,我遇到了一些意想不到的“特性”。根据文件: “注意:尽管此示例显示多个断言失败,但一旦一个断言失败,测试将立即停止,导致跳过所有其他断言。” 我习惯于在有意义的测试名称下对断言进行分组。如果我有5个断言,其中2个没有通过,我希望在测试结果中看到这两个断言。如果在一个测试中有许多失败的断言,我不能一次修复所有这些断言。我必须“修复”第一个重新测试,找到另一个。。。“修复”并重新测试。。。等等 当我在我当地的环境中时,这不是什么大不了的事。在持续集成环境中,问题开始变得严重。我不想为每个失败的断言运行构建(在Bambor/Jenkins上)。如果我在一个测试用例中有多个测试(这是很有可能的…),那将是一场噩梦,我的团队将在仅仅一天之后杀死我 目前我正在使用一种“变通方法”。。。每个测试只有一个断言:(这意味着很多测试 是否有其他方法解决此问题 感谢您的帮助!谢谢!您想做的(以及我们在YUI中自己的测试中所做的)是将您的不同测试分组在一个Javascript 只有一个失败的断言后,测试才会停止,javascript,unit-testing,continuous-integration,yui,assertions,Javascript,Unit Testing,Continuous Integration,Yui,Assertions,我来自QUnit的背景(多年来我一直很高兴使用它)。在我当前的项目中,YUI是一个可供选择的框架,因此使用YUI.Test进行单元测试是合理的 我正在使用3.4.0版。 不幸的是,我遇到了一些意想不到的“特性”。根据文件: “注意:尽管此示例显示多个断言失败,但一旦一个断言失败,测试将立即停止,导致跳过所有其他断言。” 我习惯于在有意义的测试名称下对断言进行分组。如果我有5个断言,其中2个没有通过,我希望在测试结果中看到这两个断言。如果在一个测试中有许多失败的断言,我不能一次修复所有这些断言。我
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有自己的设置/拆卸。是的,我必须稍微改变一下我的习惯:)我希望这个问题对将来遇到这个问题的人有所帮助。是的,我必须稍微改变一下我的习惯:)我希望这个问题对将来遇到这个问题的人有所帮助。