typescript - hvordan skrive mockdata for å hente verdien fra en tjeneste i Angular


Jeg har kundedetaljer som customerName, og jeg må bruke det på 2 sider, så jeg bruker getter og setter i service-filen. Jeg setter customerName i service (komponent 1) og henter det hvor det enn trengs (komponent 2). Jeg møter på en feil når jeg skriver testtilfelle (komponent 2) for å hente verdien (i komponent 2).

jeg har prøvd som nedenfor

const customerSpy = jasmine.createSpyObj('customerService', ['getCustomerName', 'setCustomerName']);


it('should tests save customer name function', () => {
      customerSpy.setCustomerName('xxx'); - I have tried to adding like this
        let response = {
            'response': 'success'
        };
        customerSpy.saveCustomerName.and.returnValue(of(response));
        fixture.detectChanges();
        component.saveCustomerName();
    });

Spesifikasjonsfil:

const customerSpy = jasmine.createSpyObj('customerService', ['getCustomerName', 'setCustomerName', 'saveCustomerName']);

it('should tests save customer name function', () => {

        let response = {
            'response': 'success'
        };
        customerSpy.saveCustomerName.and.returnValue(of(response));
        fixture.detectChanges();
        component.saveCustomerName();
    });

komponentkode:

komponent 1:

public dummyFunc(){
  this.customerService.setCustomerName('xxx');
}

komponent 2:

public saveCustomerName() {
    let name = this.customerService.getCustomerName();
    this.customerService.saveCustomerName(name).subscribe(
      (success) => {

      },
      (fail) => {
      }
    );
  }

mens jeg kjører testtilfellet for komponent 2, bør jeg få kundenavnet i komponent 2 for å sende det til mocktjenesten

Svar #1

Du trenger ikke å bekymre deg for component1 når du tester component2. Du kan isolere det for følgende funksjon som:

public saveCustomerName() {
    this.showSpinner = true;
    let name = this.customerService.getCustomerName();
    this.customerService.saveCustomerName(name).subscribe(
      (success) => {
        this.showSpinner = false; // or something similar variable assignment.
      },
      (fail) => {
      }
    );
  }

og i spesifikasjonsfilen:

it('should set customer name on calling function "saveCustomerName()"', () => {
   spyOn(component.customerService,'getCustomerName').and.returnValue('testName');
   spyOn(component.customerService,'saveCustomerName').and.returnValue(of('saved'));
   component.showSpinner = true;
   component.saveCustomerName();
   expect(component.customerService.getCustomerName).toHaveBeenCalled();
   expect(component.customerService.saveCustomerName).toHaveBeenCalledWith('testName);
   expect(component.showSpinner).toBeFalsy();
});