我来自 QUnit 背景(多年来我一直很高兴使用它)。在我当前的项目中,YUI 是一个选择的框架,因此使用 YUI.Test 进行单元测试是合理的。
我使用的是 3.4.0 版本。
不幸的是我遇到了一些意想不到的“功能”。根据文档http://yuilibrary.com/yui/docs/test/#assertions :
“注意:尽管此示例显示多个断言失败,但一旦一个断言失败,测试就会停止,从而导致跳过所有其他断言。”
我习惯于将断言分组到有意义的测试名称下。如果我有 5 个断言,其中 2 个失败,我希望在测试结果中看到这两个断言。如果在单个测试中有大量失败的断言,我无法立即修复所有这些断言。我必须“修复”第一个测试,找到另一个...“修复”并重新测试...等等。
当我在本地环境中时,这不是什么大问题。在持续集成环境中问题开始变得严重。我不想为每个失败的断言运行构建(在 Bamboo/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
下名称代替。单个测试的名称应该是一个简单的、人类可读的描述,描述您正在测试的特定功能,并且应该仅针对该功能进行断言。
关于javascript - YUI.Test 测试在只有一个失败的断言后停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18142358/