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
.