filter의 경우에는 배열에 대한 조건을 처리하고 있기 때문에, 최대한 가벼울 필요가 있는 객체이기도 합니다. 또한, non-HTTP service의 경우에는 값의 계산이나 validation에 대한 처리가 일반적입니다.
filter의 테스트는 다음을 확인하면 됩니다.
input array data의 filtering이 정상적으로 되었는지
> count를 이용하는 것이 일반적입니다.
다음은 간단한 filter code입니다.
angular.module('fmsmobilewebApp').filter('planFilter', function () {
return function (plans, status) {
if(status == '' || status == '0') {
return plans;
} else {
var result = [];
angular.forEach(plans, function(plan) {
if(plan.statusId == status) {
result.push(plan);
}
});
return result;
}
};
});
위와 같은 filter code의 경우, filter의 input 값을 개발자가 제어를 해서 처리하면 간단히 해결됩니다. 다음과 같은 방법으로요.
describe('Filter: planFilter', function () {
beforeEach(module('fmsmobilewebApp'));
var planFilter;
var plans;
beforeEach(inject(function ($filter) {
planFilter = $filter('planFilter');
plans = [{"section":"정기","sectionId":"1801","type":"일반","mainBody":"대성","classification":"보고관리","priority":"1일이내","planDate":"2014-09-02 16:00","statusId":"0805","name":"A 보고관리 (주 2회)","id":"33913","department":"관리팀","orderDate":"2014-09-11","status":"완료"},{"section":"정기","sectionId":"1801","type":"일반","mainBody":"대성","classification":"보고관리","priority":"1일이내","planDate":"2014-09-05 16:00","statusId":"0805","name":"A 보고관리 (주 2회)","id":"33914","department":"관리팀","orderDate":"2014-09-11","status":"완료"}];
}));
it('not filtered (status is empty)', function() {
var count = plans.length;
expect(planFilter(plans, '').length).toBe(count);
expect(planFilter(plans, '0').length).toBe(count);
});
it('filtered plans', function() {
var count = 0;
var status = '0805';
angular.forEach(plans, function(plan) {
if(plan.statusId == status) {
count++;
}
});
expect(count).toBeGreaterThan(0);
expect(planFilter(plans, status).length).toBe(count);
});
});
Posted by Y2K