AngularJS에서 격리 된 범위를 단위 테스트하는 좋은 방법은 무엇입니까?
지시어 스 니펫
scope: {name: '=myGreet'},
link: function (scope, element, attrs) {
//show the initial state
greet(element, scope[attrs.myGreet]);
//listen for changes in the model
scope.$watch(attrs.myGreet, function (name) {
greet(element, name);
});
}
지시문이 변경 사항을 수신하고 있는지 확인하고 싶습니다 . 격리 된 범위 에서는 작동 하지 않습니다 .
it('should watch for changes in the model', function () {
var elm;
//arrange
spyOn(scope, '$watch');
//act
elm = compile(validHTML)(scope);
//assert
expect(scope.$watch.callCount).toBe(1);
expect(scope.$watch).toHaveBeenCalledWith('name', jasmine.any(Function));
});
업데이트 : 예상되는 감시자가 자식 범위에 추가되었는지 확인하여 작동하도록했지만 매우 취약하며 아마도 문서화되지 않은 방식으로 접근자를 사용합니다 (예고없이 변경 될 수 있음!).
//this is super brittle, is there a better way!?
elm = compile(validHTML)(scope);
expect(elm.scope().$$watchers[0].exp).toBe('name');
업데이트 2 :
내가 언급했듯이 이것은 부서지기 쉽습니다! 아이디어는하지만 여전히 접근이 변경되었습니다 AngularJS와 새로운 버전의 작동 scope()
에 isolateScope()
:
//this is STILL super brittle, is there a better way!?
elm = compile(validHTML)(scope);
expect(elm.isolateScope().$$watchers[0].exp).toBe('name');