2013-03-24 8 views
14

나는 단위 테스트를하려고하는 간단한 서비스를 가지고 있습니다. 아무리 노력해도 searchService는 알 수없는 공급자이거나 서비스가 null입니다. 이상하게도 내 테스트가 실패하지 않습니다 !!).재스민을 사용하여 간단한 AngularJS 서비스 테스트

누구나 내가 잘못하고있는 것에 대한 통찰력이 있습니까 ??

angular.module('app').service('searchService', function($q, _) { // _ is lodash 

    var cache = [ 
    { 
     id: "current", 
     name: "Current", 
     description: "Search current data" 
    }, 
    { 
     id: "historical", 
     name: "Historical", 
     description: "Search historical data" 
    } 
    ]; 

    this.getSearchOptions = function() { 
    var deferred = $q.defer(); 
    deferred.resolve(angular.copy(cache)); 
    return(deferred.promise); 
    }; 

    this.getSearchOptionsByID = function(id) { 
    var deferred = $q.defer(); 
    var searchOption = _.findWithProperty(cache, "id", id); 

    if (searchOption) { 
     deferred.resolve(angular.copy(searchOption)); 
    } else { 
     deferred.reject(); 
    } 
    return(deferred.promise); 
    }; 
    } 
); 

나는 searchService에 부하가 그래서 캐시 된 값을 확인할 수있는 단위 테스트를 만들기 위해 노력하고 있어요 :

describe("Unit: Testing Services", function() { 
    describe("Search Service:", function() { 
    var service = null; 

    beforeEach(function() { 
     angular.module('app').service('_'); 
    }); 
    // I've also tried the commented out code below 
    //beforeEach(inject(function(searchService) { 
    //this.service = searchService; 
    //})); 
    //it('should contain an searchService', invoke(function(service) { 

    it('should contain an searchService', function(searchService) { 
     expect(searchService).not.to.equal(null); 
    }); 

    it('should contain two search options', function(searchService) { 
     expect(searchService.getSearchOptions()).to.equal(2); 
    }); 
    }); 
}); 

답변

21

이 매개 변수없이 서비스에 대한 다음과 같은 작업을해야하는 것은, 어쩌면이가 될 수 있습니다 시작 지점 :

describe("Unit: Testing Services", function() { 
    describe("Search Service:", function() { 

     beforeEach(function() { 
      angular.module('app'); 
     }); 

     it('should contain a searchService', 
      inject(function(searchService) { 
       expect(searchService).not.to.equal(null); 
     })); 

     it('should contain two search options', 
      inject(function(searchService) { 
       expect(searchService.getSearchOptions()).to.equal(2); 
     })); 

    }); 
}); 

(또한 여기에 모습을 가질 수 있습니다 How do I test an AngularJS service with Jasmine?를)

+1

이 있어요 나는 올바른 방향으로 가고있다. 감사! angular.module ('app')을 삭제하고 모듈 ('app') 만 수행했습니다. 그리고 나서 주사를 바꿨습니다. (늦었습니다. 내 손가락이 그들 자신의 마음을 가졌음을 짐작할 수 있습니다.) – nathasm

+5

듣기 좋은데. 참고로 실제로 module ('app')은 실제 모듈의 모의 객체를 생성 할 수있게 해주는 angular.mock.module ('app')의 바로 가기입니다. – Flolagale

관련 문제