다른 서비스에 의존하는 AngularJS에서 간단한 서비스를 테스트하는 데 문제가 있습니다. 난 그냥 대신 서비스를 만드는 window.location.pathname를 사용하려고 시작에서의존성이있는 AngularJS 서비스 테스트
serviceModule.factory('filtersService', ['$rootScope', 'urlService', function($rootScope, urlService){
return {
getFilters: function(){
if(urlService.getPathName() == "test")
{
return "something";
}
}]);
하지만 잘못된 방법처럼 보였다 조롱 할 수 있도록 :
서비스는이 같은 비트 보이는 그것. 따라서 urlService를 만들었는데, 기본적으로 window-object를 둘러싼 간단한 래퍼입니다.
나는 다음과 같습니다 내 filtersServiceTest 있습니다
describe('filtersService test', function(){
var filtersService, urlServiceMock;
beforeEach(module('App.services'));
beforeEach(function(){
urlServiceMock = {
getPathName: function(){
return "";
}
};
module(function($provide){
$provide.value('urlService', urlServiceMock);
});
});
it('Should return something if url is test', inject(function(filtersService){
urlServiceMock = {
getPathName: function(){
return "test";
}
};
expect(filtersService.getFilters()).not.toBe("something");
}));
});
을하지만이 작동하지 않습니다. 실제로 실행되기 전에 urlServiceMock을 오버로드 할 수 없습니다. 'beforeEach
'을 각각 변경할 수 있으므로 getPathName은 "test"를 반환하지만 URL이 테스트와 동일하지 않은 위치를 테스트 할 수는 없습니다.
참조 된 jsfiddle이 누락되었습니다. – jeriley
Fiddle is broken –
The fiddle 404ed. – Stephane