0

Könnten Sie mir bitte helfen, das folgende Problem zu lösen. Ich bin ziemlich neu in der Winkel- und Unit-Prüfung. Der Service gibt kein Versprechen ab.Fehler in Karma Jasmine Unit-Test: "Erwarteter Spion VehicleId wurde aufgerufen"

Error: Expected spy fetchVehicleId to have been called.

Component Code Snippet:

async getVehicleId() { 
    debugger; 
    try {   
    if(this.selectedId) { 
     let data: any = await this.VehicleComposer.fetchVehicleId(this.selectedID); 
     this.vehicleQuantity = data.vehicleCaseQuantity; 
     this.vehicleId = data.vehicleId; 
     console.log("return service data",data); 
     } 
    } 
    catch (err) { 
    console.log(err) 
    } 
} 

Service-Composer-Code Snippet:

fetchVehicleId(selectedID) {  
    let center = this.user.getCenterId();  
    let vehicleURL = this.config.getReceiveVehicleURL(selectedID.Id,selectedID.Number,center); 
    return new Promise((resolve, reject) => { 
     this.api.put(vehicleIdURL) 
      .subscribe(
      data => { 
       this.receivingUnit = data.receivingUnitId; 
       resolve(data);     
      }, error => { 
       reject({ 
        error: true, 
        errorObj: error 
       }); 
      });        
     });   
    } 

Testing Spec-Code-Snippet:

Class MockVehicleComposerService { 
    debugger; 
    fetchVehicleId(){ 
    console.log("---------"); 
    return Observable.of({}); 
    } 
} 

describe('VehicleComponent',() => { 

    let comp: VehicleComponent; 
    let fixture: ComponentFixture<VehicleComponent>; 
    let mockService: MockVehicleComposerService; 

    beforeEach(async(() => { 

    mockService = new MockVehicleComposerService(); 

    TestBed.configureTestingModule({ 
    declarations: [VehicleComponent], 
    imports: [IonicModule.forRoot(VehicleComponent)], 
    providers: [{ 
     provide: ReceiveVehicleComposer, 
     useValue: MockVehicleComposerService 
    }] 
    })  
    .overrideComponent(VehicleComponent, { 
    set: { 
     template: '<div></div>', 
     providers: [{ 
      provide: ReceiveVehicleComposer, 
      useValue: MockVehicleComposerService 
     }] 
    } 
    }) 
    .compileComponents(); 
})); 


it('getVehicleId', async(() => { 
    debugger; 
    this.selectedID = { "Number":"123" } 
    const app = fixture.componentInstance; 
    let messageSpy = spyOn(mockService, 'fetchVehicleId'); 
    if(this.selectedID){ 
    app.getVehicleId(); 
    } 

    expect(messageSpy).toHaveBeenCalled(); 
})); 
+0

Warum spionieren Sie eine Mock-Service-Methode aus? – Aravind

+0

Was sollte ich verwenden, anstatt eine Scheinklasse auszuspionieren? Ich habe verschiedene Wege ausprobiert, aber immer noch hoffnungslos. Kannst du mich wissen lassen. – inu

Antwort

1

Sie sind fast da. Nur fehlt das Stück, wo Sie tatsächlich die Observable zurückgeben. So habe ich das in der Vergangenheit gemacht. Hoffe, das hilft Ihnen, auf dem richtigen Weg zu sein.

it('getVehicleId', fakeAsync(() => { 
    this.selectedID = { "Number":"123" } 
    const app = fixture.componentInstance; 

    let messageSpy = spyOn(mockService, 'fetchVehicleId').and.returnVaue(
    Observable.of({}); 
); 

    if(this.selectedID){ 
    app.getVehicleId(); 
    }  

    fixture.detectChanges(); 

    expect(messageSpy).toHaveBeenCalled(); 
})); 
Verwandte Themen