4
I가 다음 제공자 :
angular.module('MyApp').provider('MyDevice', function() {
var ngInjector = angular.injector(['ng']),
$window = ngInjector.get('$window');
function isMobileDevice() {
return (/iPhone|iPod|iPad|Silk|Android|BlackBerry|Opera Mini|IEMobile/)
.test($window.navigator.userAgent || $window.navigator.vendor || $window.opera);
}
this.$get = function() {
return {
isDesktop: function() {
return !isMobileDevice();
},
isMobile: function() {
return isMobileDevice();
}
};
};
});
다음과 같은 테스트 사양 :
describe('MyDeviceProvider', function() {
var myDevice;
beforeEach(function() {
inject(['MyDevice', function (_myDevice_) {
myDevice = _myDevice_;
}]);
});
it('Test #1', function() {
// Mock '$window.navigator.userAgent' to "desktop"
expect(myDevice.isDesktop()).toEqual(true);
expect(myDevice.isMobile()).toEqual(false);
});
it('Test #2', function() {
// Mock '$window.navigator.userAgent' to "mobile"
expect(myDevice.isDesktop()).toEqual(false);
expect(myDevice.isMobile()).toEqual(true);
});
});
내 질문은, 어떻게 두 Test #1
에 $window
조롱 않습니다되고 Test #2
는 그래서 그들은 성공? 무수한 객체에 대해서는 $provide.value
과 spyOn
으로 시도했지만, 내 테스트를 실행하려면 $window.navigator.userAgent
의 값을 조롱하는 것처럼 보일 수 없습니다.
어떻게 해결할 수 있습니까?
P.S : 위의 코드는 문제의 데모로만 작동하며 응용 프로그램의 특별한 요구 사항으로 인해 공급자를 서비스로 변경할 수 없습니다.
달콤한 대답 thx :) – danday74
당신은 나를 많이 도왔습니다 :) – John
'주사 ([...])를 둘러싼 기능은 초자연적이라고 믿습니다. –