Estoy tratando de probar un método que no devuelve nada. El método llama a un servicio para realizar un HTTP POST. Me burlé de mi servicio y lo configuré como un parámetro dentro de SpyOn. El segundo parámetro en la llamada de SpyOn es el nombre del método que contiene la operación de publicación. En este caso, el nombre del método es postSkillforMember. Cuando ejecuto la prueba ng, las fallas de la lista de especificaciones de Jasmine arrojan el siguiente error:
Lista de especificaciones de jazmín | Fallas:
AddSkillModalComponent > Testing addSkill() success Error: <spyOn> : could not find an object to spy upon for postSkillforMember()
¿Que estoy haciendo mal? Este es el método en mi componente.ts que quiero probar:
Método para probar:
addSkill(): void { this.successCallback=(skill: any) => { this.showAlert = false; this.activeModal.close(skill); }; this.errorCallback=(error: any)=>{ this.showAlert=true; }; const skillFormBody = { skill: { "id": this.itemFormGroup.get("skill")?.value.id, "skill": "" }, skillLevel: { "id": this.itemFormGroup.get("skillLevel")?.value.id, "skillLevel": "" } } this._skillAddService.postSkillforMember( this.memberId, skillFormBody, this.successCallback, this.errorCallback );}
Mis especificaciones se burlan del servicio dentro de la descripción:
describir en add-skill-modal.component.ts:
describe('AddSkillModalComponent', () => { let component: AddSkillModalComponent; let fixture: ComponentFixture<AddSkillModalComponent>; let mockSkillAddService: jasmine.SpyObj<SkillAddService>;}
Y, finalmente, esta es la prueba unitaria que escribí para mi método:
en add-skill-modal.component.ts:
it('Testing addSkill() success', () => { spyOn(mockSkillAddService, 'postSkillforMember'); component.addSkill(); expect(component.showAlert).toBeFalsy(); });
Realmente aprecio tu ayuda. Gracias de antemano.
¿Puedes mostrar tu TestBed.configureTestingModule({
?
Asegúrese de crear un spyObj para SkillAddService
y agréguelo a los proveedores.
beforeEach(waitForAsync(() => { // make sure you create this spy object with postSkillforMember public method to be mocked mockSkillAddService = jasmine.createSpyObj<SkillAddService>('SkillAddService', ['postSkillforMember']); TestBed.configureTestingModule({ declarations: [...], // provide the mock instead of the real one providers: [{ provide: SkillAddService, useValue: mockSkillAddService }], }).compileComponents(); })); it('Testing addSkill() success', () => { // no need to spy anymore // spyOn(mockSkillAddService, 'postSkillforMember'); component.addSkill(); expect(component.showAlert).toBeFalsy(); // can do: expect(mockSkillAddService.postSkillforMember).toHaveBeenCalled(); });