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();
});
