0

Ich schreibe den Testfall zum Testen eines Serviceanrufs in eckig. Ich gebe einen Variablenwert in der Auflösung zurück. Mein Problem ist, dass ich einen undefinierten Wert als Antwort bekomme, nachdem das Versprechen gelöst wurde. Folgendes ist das Stück Code, den ich verwende.Testmethode in Winkelauflösung

 resolve: { 
 
    peopleData: ($q, service, apiOperations, errorService) => { 
 

 
     const getHelloWorld =() => { 
 
     { 
 
      return‘ hello - world '; 
 
     } 
 
     }; 
 

 
     const errorHandler = (error, operation) => { 
 
     var deferred = $q.defer(); 
 
     errorService.handle(error, operation); 
 
     deferred.resolve({}); 
 
     return deferred.promise; 
 
     }; 
 

 
     service.getPeopleName().then((response) => { 
 
     console.log('called then method'); 
 
     if (!angular.isUndefined(response)) { 
 
      return response; 
 
     } else { 
 
      return {}; 
 
     } 
 
     }).catch((error) => { 
 
     errorHandler(error, apiOperations.GET_PEOPLE); 
 
     return {}; 
 
     }); 
 

 
    }

Jetzt ist mein Testfall ist

describe('state peopleService application', function() { 
 
    let $q, authService, $state, state_name = 'main.application', 
 
    result, $rootScope, applicationService; 
 
    let errorService = { 
 
    handle: function(error, operation) {} 
 
    }; 
 
    let apiOperations = { 
 
    GET_People: ‘getPeople ', 
 
    TEST_ERROR: 'testError' 
 
    }; 
 

 
    angular.module('mock.Service', []).service('mockPeopleService', function() { 
 
     var peopleService = {}; 
 
     peopleService.getPeople = function() { 
 
     let deferred = $q.defer(); 
 
     deferred.resolve(‘dummy response '); 
 
      return deferred.promise; 
 
     } 
 
     return applicationService; 
 
     }); beforeEach(angular.mock.module(home)); beforeEach(angular.mock.module('mock.Service')); beforeEach(angular.mock.inject(function(_$q_, _$state_, _mockPeopleService_, _$rootScope_) { 
 
     $q = _$q_; 
 
     $state = _$state_; 
 
     $rootScope = _$rootScope_; 
 
     peopleService = _mockPeopleService_; 
 
    })); it('should load the data',() => { 
 
     let state = $state.get(state_name); 
 
     let result = state.resolve.peopleData($q, peopleService, apiOperations, errorService); 
 
     $rootScope.$apply(); 
 
     console.log('result ' + result); 
 

 
    }); 
 

 

 
    }) 
 
});

Die log.console kehrt Ergebnis undefiniert

Antwort

0

Denken Sie daran, dass ich n eine Pfeilfunktion mit {geschweiften Klammern}, eine return muss genau wie in regulären Funktionen explizit sein. So mit wie derzeit geschrieben, ist undefined kaum überraschend.

ein return und Verstauen Hinzufügen, könnte man mit etwas am Ende wie folgt:

resolve: { 
    peopleData: ($q, service, apiOperations, errorService) => { 
     return service.getPeopleName().then(response => { 
     ^^^^^^ 
      if (angular.isUndefined(response)) { 
       throw new Error('response is undefined'); 
      } 
      return response; 
     }).catch(error => { 
      errorService.handle(error, apiOperations.GET_PEOPLE); 
      return {}; 
     }); 
    } 
} 

Nun steht der Test zumindest eine Chance zu arbeiten.