저는 AngularJS와 함께 cordova/phonegap 앱을 만들고 있습니다. 내 응용 프로그램에서 geolocation 플러그인과 같은 cordova의 기본 플러그인을 사용하고 있습니다.재스민 : 존재하지 않는 창 개체에 스파이 만들기
내 테스트 중에는 phonegap이 없기 때문에이 플러그인을 사용할 수 없습니다. $window.plugins
은 내 테스트에서 undefined
을 반환합니다. 그리고 물론 $window.plugins.anotherPlugin
도 실패합니다.
따라서 테스트를 위해이 부분을 조롱해야합니다. 현재, 나는이 방법
beforeEach(function() {
$window.plugins = {
anotherPlugin: {
foo: function() {}
}
};
});
그러나 미래에, 다른 라이브러리가 $window.plugins
네임 스페이스를 사용하는 경우하고있어, 나는 내 테스트에서 그것을 덮어 쓰는거야? 이것은 다른 테스트를 망칠 것입니다. 위의 방법을 사용하면 이전 테스트 결과 $window.plugins
이 다시 설정되도록 테스트 후 정리를해야합니다. 제 생각에,이 방법은 매우 깨끗하지는 않습니다. 자스민으로 이것을 할 수있는 더 좋은 방법이 있는지 궁금합니다.
그래서 내 질문은 : $window.plugins
가 존재하지 않을 때 다른 테스트에 영향을주지 않고 재 스민으로 더미 기능을 만들어서 $window.plugins.anotherPlugin
을 스파이로 검사 할 수 있습니까?
좋아 보인다. 그러나 이것은 또 다른 문제를 일으 킵니다. 저는'$ window.moment.lang (lang); '을 사용하는 라이브러리 (angular moment.js)를 가지고 있습니다. 위의 접근법을 사용하면'TypeError : undefined'의 'lang'속성을 읽을 수 없습니다. 이 문제를 해결하는 방법에 대한 아이디어? – 23tux
그 기능을 모의 할 수 없습니까? 필요하다면, 모듈 초기화 전에 inject 함수를 사용하여 순간 객체를 잡고 모의 객체에 넣을 수 있습니다. 예 : var 순간; inject (function ($ window) {순간 = $ window.moment;}); 모듈 (..., function ($ 제공) {windowMock.moment = 순간; ...}); – Slashme