Ich habe bisher erfolgreich getestet einen Winkel-Controller, der ES7 verwendet async/await Syntax mit Jasmin -
async updateGridAsync() {
const paging = angular.copy(this.gridData.getServerCallObj());
}
try {
const model = await this.service.getAsync(paging);
this._$rootScope.$apply();
} catch (e){this._notification.error(this._$rootScope.lang.notifications.unexpectedError);
}
}
it('updateGridAsync() should update the gridData when succeed', async (done) => {
expect(ctrl.gridData.totalItems).toEqual(2);
expect(ctrl.gridData.items.length).toEqual(2);
spyOn(service, 'getAsync').and.callFake(() => {
return Promise.resolve(responseStub);
});
await ctrl.updateGridAsync();
expect(service.getAsync).toHaveBeenCalled();
expect(ctrl.gridData.totalItems).toEqual(1);
expect(ctrl.gridData.items.length).toEqual(1);
done();
});
Der obige Code funktioniert perfekt. Ich habe jedoch ein Problem festgestellt, als ich einmal versuchte, den verspotteten Dienstcode zu testen, der $ http.post aufruft. Dies ist der Code, den ich im Dienst ausführen:
async getAsync(pagingData, spinner, gridId, payeeId){
const response = await $http.post(url, params);
const model = this.modelFactory(response.data);
return model ;
}
und die Testmethode, die nicht in der Lage ist, einen Schritt nach dem await in updateGridService zu gehen:
it('getAsync should return correct model', async (done) => {
$httpBackend.whenPOST(theUrl).respond(200, responseStub);
const model = await service.getAsync();
expect(model.list.length).toEqual(2);
$httpBackend.flush();
done();
});
Ein paar Dinge hinzuweisen -
- Bevor Sie async verwenden, wird dieser Test bestanden. Jetzt bekomme ich nicht die Wartezeit im Dienst.
- Die Funktionalität funktioniert, wenn in Testkontext nicht.
- Ich bin mit Jasmin 2.4.1 und AngularJS 1,6
haben Sie eine Lösung für erwarten von Asynchron-Test bestanden? – Nader