I 각도 적용. 그러나이 사실은 여기서 중요하지 않아야합니다. 내 기능을 테스트 할 수는 다음과 같습니다 : 원하는대로단위 변수 var 변수를 단위로 사용하는 방법
$scope.showItem = function (item) {
if (item.selected) {
activeItems.push(item);
} else {
var index = _.indexOf(activeItems, items);
activeItems.splice(index, 1);
}
};
기능이 작동합니다. 배열 activeItems는 일부 수정 후에 결과를 범위에 할당하는 다른 함수에서 사용됩니다. 항목을 선택하지 않으면 배열에 추가됩니다. 항목이 이미 선택되어 있으면 배열에서 제거됩니다.
it('should remove an item from the array', function() {
var activeItems = [{id: 1, selected: false}, {id:2, selected: true}];
var item = {
id: 1,
selected: false
};
expect(activeItems.length).toEqual(2);
scope.showItem(item);
expect(activeItems.length).toEqual(1); // FAIL!
// expects do not work for var variables. would work, if activeItems is assigned to the scope
});
activeItems를 범위 (var activeItems 대신 scope.activeItems)에 할당하면 모두 작동합니다. 그러나 변수에 뷰를 표시 할 수없는 경우이를 범위에 할당해야합니다 믿습니다.
expect(activeItems.length).toEqual(1);
하지만 범위 변수에 대한 것 :
expect(activeItems.length).toEqual(2);
둘째하지 않습니다 :
먼저 블록 안에 정의되어 있기 때문에 작동 할 것으로 예상
이expect(scope.activeItems.length).toEqual(1);
내 질문은 그 var 값을 테스트하는 방법?
메서드의 내부 구현을 테스트하려고하는 것처럼 들리네. 한 발 뒤로 물러나서 비즈니스/기능적 관점에서 귀하의 기능이 달성하고자하는 것을 생각하고이를 바탕으로 테스트를 작성하십시오. – DoctorMick
또한,'activeItems'는 현재'showItem' 구현에있는'$ scope'의 속성입니다. 그래서 여러분이 실제적으로 무언가를 스코어에 추가하는 것을 테스트하기 위해서 그것은 전역 변수 일뿐입니다. 두 번째로,'activeItems'는 두 가지 선택 모두에서 사용하기 때문에 할당되어야합니다. –
귀하의 의견에 감사드립니다 (아래 @ wyattbergeron1 포함). 뷰에 표시되지 않는 $ 범위 변수에 첨부하지 말라고 들었습니다. 그래서 activeItems는 $ scope.activeItems가 아닌 global var입니다. 나중에 코드에서 activeItems는 다른 $ scope 배열을 작성하는 데 사용됩니다.이 배열은 올바르게 테스트되었습니다. 귀하의 답변이 시험을 치유 할 수있는 요소였습니다. – Marcin