我有一个功能:
function getNames() {
var ids = [];
var checkAttr = function (array, attr, value) {
for (var i = 0; i < array.length; i++) {
if (array[i][attr] === value) {
return false;
}
}
return true;
};
for (var i = 0; i < result.length; i++) {
var selected = result[i];
if (checkAttr($scope.names, "name", selected.name) && ids.indexOf(selected.id) === -1 && selected.myInfo && selected.name !== "") {
$scope.fundNames.push({
name: selected.name,
id: selected.id
});
ids.push(selected.id);
}
}
...
}
我想编写一个测试,检查我是否使用checkAttr函数检查name和id以删除重复项。但我不知道该怎么做。我尝试使用spyOn但不断出错。
我想要的内容如下:
it('should check the name and id to remove duplicates', function() {
//do something here
});
答案 0 :(得分:3)
在不更改代码的情况下模拟该方法是不可能的。
我认为如果你能窥探一个私人功能,这将是一个糟糕的考验。通常,您的测试必须不了解函数的内部实现,因为如果更改内部,则必须更改测试。这是一个不好的做法。在您的情况下,您应该通过设置getNames
并在调用后检查$scope.names
的结果来测试函数$scope.fundNames
,如黑框。
但是你可以将checkAttr
函数移到外面并使用spyOn来实现你的测试用例。