Wie kann ich $ q.all Versprechen in Jasmine Unit Tests lösen?
Mein controller hat einen code wie unten:
$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];
});
Und in meinem unit-tests bin ich etwas wie dieses:
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;
});
Nun in meinem test bin ich zu überprüfen ob Dienstleistungen werden genannt und die data1, data2 sind nicht undefiniert..
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();
});
mein problem ist, das war in Ordnung arbeiten, bis ich ersetzte meine einzelnen service-aufrufen im controller mit q.alle und in tests scope.$apply
mit rootScope.$digest
. Mit q.alle und rootScope.$digest
(versucht, mit scope.$apply
) beide tests schlägt fehl mit Fehler:
10 $digest() Iterationen erreicht. Aborting!
wenn ich entfernen rootScope.$digest
dann die Versprechen, die nie aufgelöst wird und tests fehlschlägt sagen
erwartet undefiniert definiert werden.
Jede Hilfe, wie sollte ich unit-tests code mit q.all
?
kam über dieser Beitrag
Aber das hilft auch nicht, da bin ich schon versuchen, zu verwenden $digest
.
InformationsquelleAutor der Frage Rahul R. | 2013-05-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie versuchen, indem
$rootScope.$apply()
in einemafterEach()
callback-Funktion. Versprechungen lösen sich auf$apply()
im Winkel.InformationsquelleAutor der Antwort Thomas Schultz