Karma 및 Jasmine을 사용한 각도 서비스에서의 '프라이빗' 기능 테스트 방법
각진 앱에 다음과 같은 서비스가 있습니다.
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;
}
};
}]);
반품 명세서에 기재되어 있는 기능/특성뿐만 아니라 반품 명세서에 기재되어 있지 않은 기능까지 테스트하고 싶습니다.
현재 테스트는 다음과 같이 설정되어 있습니다.
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);
}));
});
그러나 return 문에 노출되지 않은 compare, filter 및 createBrackets 함수를 테스트하려면 어떻게 해야 합니까?
감사합니다!
그 기능을 테스트할 방법은 없습니다.그 범위는 Bracket Service 팩토리를 구성하는 기능으로 다른 곳에서는 보이지 않습니다.테스트하려면 어떻게 해서든 노출시켜야 해
자체 서비스로 이동하거나(과잉으로 생각됨), 내부 기능이 작동하는지 확인하기 위해 충분한 데이터 조합을 사용하여 Bracket Service 서비스를 블랙박스로 테스트할 수 있습니다.그게 아마 가장 합리적인 방법일 거예요.
별도의 서비스를 원하지 않지만 내부 기능을 테스트할 필요가 있다고 생각되면 returnBrackets와 함께 공장에서 반품하십시오.
개별적으로 테스트하기 쉬운 도우미 기능이 여러 개 있지만 조합적인 Pandora's 박스에서 블랙박스 테스트를 여는 경우 이 작업을 수행할 수 있습니다.저는 보통 이러한 함수의 선두에 "_"를 붙여 도우미 함수임을 나타내며 테스트용으로만 노출됩니다.
return {
//create brackets from a list of competitors
returnBrackets: function(competitors) {...},
_filterWeightGroup: filterWeightGroup,
_createBracketsByWeightGroup: createBracketsByWeightGroup
};
그 함수는 어떻게든 공개하지 않으면 호출할 수 없습니다.단, IMHO, 개인 메서드는 유닛테스트가 아니라 이들을 호출하는 공용 메서드가 테스트될 때 테스트되어야 합니다.프라이빗 기능이 수신하는 오브젝트를 조롱하면 그 오브젝트에 대한 기대를 실행할 수 있습니다.
현재 셋업에서 테스트하는 유일한 방법은 반환된 함수를 테스트하는 것입니다.이 함수는 현재 내부 스코프에 로컬로 존재하기 때문입니다.BracketService개별적으로 테스트할 수 있도록 하려면 반품 명세서에 다음 속성으로 표시해야 합니다.BracketService.
언급URL : https://stackoverflow.com/questions/31013335/how-to-test-private-functions-in-an-angular-service-with-karma-and-jasmine
'programing' 카테고리의 다른 글
| TypeScript에서 문자열을 숫자로 변환하는 방법 (0) | 2023.03.26 |
|---|---|
| json에서 대괄호를 사용하는 목적은 무엇입니까? (0) | 2023.03.26 |
| JDBC ResultSet 테이블 별칭이 있는 열을 가져옵니다. (0) | 2023.03.26 |
| 새 범위를 만들지 않고 지시 템플릿으로 변수 전달 (0) | 2023.03.26 |
| Unicode로 Panda DataFrame을 JSON에 쓰기 (0) | 2023.03.26 |