2013-03-24 18 views
14

Mam prostą usługę, którą próbuję przeprowadzić test jednostkowy. Bez względu na to, co próbuję, albo usługa wyszukiwania jest nieznanym dostawcą, albo usługa ma wartość zerową (co w dziwny sposób nie spowoduje niepowodzenia mojego testu !!).Testowanie prostej usługi AngularJS przy użyciu Jasmine

Ktoś ma wgląd w to, co robię źle?

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); 
    }; 
    } 
); 

Próbuję utworzyć testów jednostkowych, że ładunki w Zlecenie wyszukiwania, więc mogę sprawdzić buforowane wartości:

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); 
    }); 
    }); 
}); 

Odpowiedz

21

Poniższy powinien pracować za usługę bez parametru, może to może być punktem wyjścia:

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); 
     })); 

    }); 
}); 

(można też rzucić okiem tutaj: How do I test an AngularJS service with Jasmine?)

+1

Zrobiło ja zmierzam we właściwym kierunku. Dzięki! Zrzuciłem angular.module ("app") i właśnie zrobiłem moduł ("app"). A potem zmieniono wywołanie na wstrzyknięcie (było późno, zgadnij, że moje palce miały własny umysł). – nathasm

+5

Miło słyszeć. Na marginesie, faktycznie moduł ("app") jest skrótem dla angular.mock.module ("app"), który pozwala na tworzenie makiet swojego prawdziwego modułu. – Flolagale

Powiązane problemy