promises promesas example angularjs unit-testing jasmine karma-runner jasmine-jquery

angularjs - promesas - promise angular 6



¿Cómo resolver $ q.todas las promesas en las pruebas de la unidad Jasmine? (1)

Puede intentar poner $rootScope.$apply() en una función de devolución de llamada afterEach() . Las promesas se resuelven en $apply() en Angular.

afterEach(function(){ rootScope.$apply(); });

Mi controlador tiene un código como el siguiente:

$q.all([qService.getData($scope.id), dService.getData(), qTService.get()]) .then(function (allData) { $scope.data1 = allData[0]; $scope.data2 = allData[1]; $scope.data3 = allData[2]; });

Y en mis pruebas unitarias estoy haciendo algo como esto:

beforeEach(inject(function($rootScope, $q, $location){// and other dependencies... qServiceSpy = spyOn(_qService, ''getData'').andCallFake(function () { var data1 = { id: 1, sellingProperty: 1, }; var d = $q.defer(); d.resolve(data1); return d.promise; }); dServiceSpy = spyOn(_dService, ''getData'').andCallFake(function () { var data2 = [{ "id": "1", "anotherProp": 123 }]; var d = $q.defer(); d.resolve(data2); return d.promise; }); qTServiceSpy = spyOn(_qTService, ''get'').andCallFake(function () { var data3 = [{ id: 0, name: ''Rahul'' }]; var d = $q.defer(); d.resolve(data3); return d.promise; }); rootScope = $rootScope; });

Ahora, en mi prueba, estoy verificando si se llaman los servicios y los datos1, los datos2 no están indefinidos.

it(''check if qService'' got called, function() { expect(scope.data1).toBeUndefined(); rootScope.$digest(); expect(_quoteService.getQuote).toHaveBeenCalled(); }); it(''check if "data1" is defined'', function () { expect(scope.data1).toBeUndefined(); rootScope.$digest(); expect(scope.data1).toBeDefined(); });

mi problema es que esto funcionó bien hasta que reemplacé mis llamadas de servicio individuales en el controlador con q.all y en el scope.$apply pruebas scope.$apply con rootScope.$digest . Con q.all y rootScope.$digest (intentado usar scope.$apply rootScope.$digest también) ambas pruebas fallan con error:

10 iteraciones de $ digest () alcanzadas. Aborto!

si rootScope.$digest , las promesas nunca se resuelven y las pruebas fallan diciendo

esperado undefined para ser definido.

Cualquier ayuda, ¿cómo debo codificar las q.all con q.all ?

encontré esta publicación

Pero eso tampoco ayuda ya que estoy tratando de usar $digest .