2013-11-26 2 views
1

개인 기능이있는 공장 foo 공장이 foo입니다. 공장은 개인 기능으로 설정된 foo과 설정되어있는 foo_alias이라는 두 가지 속성을 가진 객체를 반환합니다. function(){ foo() }재스민을 사용하여 AngularJS 서비스의 개인 기능을 감시합니다.

에 나는 통해 개인 기능 foo 스파이 재스민 스파이를 사용하려고 시도하고있다 : spyOn(myFactory, 'foo')과는 foo_alias를 통해 호출되었는지 여부를보고. 모든 것이 원래 전용 함수 foo을 가리키고 있기 때문에 별칭을 호출하면 스파이가 트리거됩니다. 즉 expect(myFactory.foo).toHaveBeenCalled()이 작동하지 않습니다.

plunkr이 문제를 보여주는 것은 여기에 있습니다 : http://plnkr.co/edit/i032kHYToe5sGml0Mnqn?p=preview

나는이에 대한 몇 가지 도움과 별칭을 통해 개인 기능을 시험하기위한 어떤 제안을 주셔서 감사합니다 정말 것이다. 특히, 올바른 매개 변수를 사용하여 내부 함수를 호출하고 있는지 확인하고자하는 편의 메서드가 많이 있습니다.

답변

9

원하는 것을 얻으려면 foo_aliasthis.foo()으로 전화하면됩니다.

이유는 spyOn()이 호출 된 후 myFactory.foo이 래퍼 함수 (wrapper function), 즉 myFactory.foo === wrapped_fn으로 바뀌었기 때문입니다. "wrapped_fn"은 jasmine에서 함수를 "스파이"하는 데 사용됩니다. 그러나 myFactory.foo_alias은 여전히 ​​스파이가 아닌 원래 foo()을 호출합니다. 따라서 expect(myFactory.foo).toHaveBeenCalled()은 오류를 발생시킵니다.

foo_aliasthis.foo()으로 호출하면 올바른 버전의 myFactory.foo()이 호출됩니다.

+0

감사합니다. – wlingke

관련 문제