2017-08-10 2 views
1

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
+0

haben Sie eine Lösung für erwarten von Asynchron-Test bestanden? – Nader

Antwort

0

Ich glaube nicht, dass Sie diese zusammen verwenden können - erwarten wartet tatsächlich bis das Backend Versprechen löst und dass durch Spülung ausgelöst wird, sondern auch auslösenden es bevor irgendeine Anfrage gemacht worden ist, tut nicht gut.

Verwandte Themen