2014-05-18 22 views
6

Ecco il mio servizio:

var services = angular.module('amdotcom.services', ['ngResource']); 

services.factory('homePageRes', ['$resource', '$window', 
    function ($resource, $window) { 
     var wdw = angular.element($window); 
     return $resource('home/index', { 
      height: wdw.height(), 
      width: wdw.width() 
     }); 
    }]); 

services.factory('homePageLoader', ['homePageRes', '$q', 
    function (homePageRes, $q) { 
     return function() { 
      var delay = $q.defer(); 
      homePageRes.get(function (homePage) { 
       delay.resolve(homePage); 
      }, function() { 
       delay.reject('Unable to fetch home page'); 
      }); 
      return delay.promise; 
     }; 
    }]); 

Sotto è la mia prova da prima di introdurre il servizio di $ finestra. Questi test hanno funzionato bene, ma una volta introdotto il servizio $ window, non sono in grado di deriderlo.

describe('Services', function() { 

    beforeEach(function() { 
     module("amdotcom.services"); 
    }); 

    describe('homePageLoader', function() { 
     var mockBackend, loader; 

     beforeEach(inject(function ($httpBackend, homePageLoader) { 
      mockBackend = $httpBackend; 
      loader = homePageLoader; 
     })); 

     it('should return home page information', function() { 
      mockBackend.expectGET('home/index?height=400&width=500').respond({ "Albums": [{ "Id": 2, "Name": "best shots" }] }); 

      var homePageData; 

      var promise = loader(); 
      promise.then(function (homePg) { 
       homePageData = homePg; 
      }); 

      expect(homePageData).toBeUndefined(); 

      mockBackend.flush(); 

      expect(homePageData.Albums[0].Id).toEqual(2); 
      expect(homePageData.Albums[0].Name).toEqual("best shots"); 
     }); 

     afterEach(function() { 
      mockBackend.verifyNoOutstandingExpectation(); 
      mockBackend.verifyNoOutstandingRequest(); 
     }); 
    }); 
}); 

sto ottenendo l'errore dicendo: TypeError: 'undefined' non è una funzione (valutare 'wdw.height()')

Ho provato ad utilizzare il provider $ ei metodi spyOn, ma nessuno stanno lavorando. Per favore aiuto.

Arun

risposta

6

Apparentemente l'altezza() e la larghezza (funzioni) sono errati. Li ho trasformati in innerHeight e innerWidth properties.

services.factory('homePageRes', ['$resource', '$window', 
    function ($resource, $window) { 
     return $resource('home/index', { 
      height: $window.innerHeight, 
      width: $window.innerWidth 
     }); 
    }]); 

beforeEach(function() { 
    angular.mock.module("amdotcom.services", function ($provide) { 
     var myMock = { 
      innerHeight: 400, 
      innerWidth: 500 
     }; 
     $provide.value('$window', myMock); 
    }); 
}); 

Poiché il mio commento precedente non è stato formattato e meno leggibile, l'ho aggiunto di nuovo qui.

Problemi correlati