pan*_*ter 30 javascript unit-testing jasmine angularjs angular-services
我在我的角应用程序中有一个服务,看起来像这样:
angular.module('BracketService', []).factory('BracketService', [function() {
function compareByWeight(a, b) {
return a.weight - b.weight;
}
function filterWeightGroup(competitors, lowWeight, highWeight) {
//filter stuff
}
function createBracketsByWeightGroup(weightGroup) {
//create some brackets
}
//set some base line values
var SUPER_HEAVY_WEIGHT = 500;
var SUPER_LIGHT_WEIGHT = 20;
return {
//create brackets from a list of competitors
returnBrackets: function(competitors) {
var brackets = {};
//get super light weights
brackets.superLightWeights = createBracketsByWeightGroup(
filterWeightGroup(competitors, 0, SUPER_LIGHT_WEIGHT)
.sort(compareByWeight)
);
brackets.superHeavyWeights = createBracketsByWeightGroup(
filterWeightGroup(competitors, SUPER_HEAVY_WEIGHT, Infinity)
.sort(compareByWeight)
);
brackets.middleWeights = createBracketsByWeightGroup(
filterWeightGroup(competitors, SUPER_LIGHT_WEIGHT, SUPER_HEAVY_WEIGHT)
.sort(compareByWeight)
);
return brackets;
}
};
}]);
Run Code Online (Sandbox Code Playgroud)
我想不仅单元测试return语句中公开的函数/属性,还要测试return语句之外的函数.
我的测试目前设置如下:
describe('BracketService', function() {
beforeEach(module('bracketManager'));
it('calling return brackets with no competitors will return 3 empty weight classes', inject(function(BracketService) {
var mockCompetitors = [];
var mockBracketResult = {superHeavyWeights: [[]], superLightWeights: [[]], middleWeights: [[]]};
expect(BracketService.returnBrackets(mockCompetitors)).toEqual(mockBracketResult);
}));
});
Run Code Online (Sandbox Code Playgroud)
但是,如何测试return语句未公开的compare,filter和createBrackets函数?
谢谢!
Rob*_*kal 31
没有办法测试这些功能.它们的范围是包含BracketService工厂的功能,它们在任何其他地方都是不可见的.如果你想测试它们,那么你必须以某种方式暴露它们.
您可以将它们移动到自己的服务中(这似乎有点过分),或者您可以使用足够的数据组合对您的BracketService服务进行黑盒测试,以确保内部功能正常工作.这可能是最明智的做法.
如果您不想将它们放在单独的服务中,但仍然觉得需要测试这些内部函数,只需将它们与returnBrackets一起从工厂返回.
当我有一些直接单独测试的辅助函数时,我可能会这样做,但打开一个组合潘多拉盒子到黑盒子测试.我通常用"_"来表示这些函数,以表明它们是辅助函数,并且仅用于测试.
return {
//create brackets from a list of competitors
returnBrackets: function(competitors) {...},
_filterWeightGroup: filterWeightGroup,
_createBracketsByWeightGroup: createBracketsByWeightGroup
};
Run Code Online (Sandbox Code Playgroud)
tax*_*ala 13
如果不以某种方式暴露它们,您将无法调用这些函数.但是,恕我直言,私有方法不应该有单元测试perse,但在测试它们的公共方法时进行测试.你应该做的是模拟你的私人功能将收到的对象,你将能够对它们表现出期望.
| 归档时间: |
|
| 查看次数: |
24534 次 |
| 最近记录: |