Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

443
Vistas
Se esperaba que se llamara a la navegación espía con: [ [ '/members' ] ] pero nunca se llamó

Tengo un servicio con un método que realiza una eliminación de http. Si la eliminación ha sido exitosa, redirijo a otra página. Cuando pruebo este método, si la identificación del parámetro que le paso es correcta, espero que se haya llamado a router.navigate. Pero por alguna razón esto no sucede, así que recibo este informe de Jasmine:

Prueba de falla de especificación de jazmín:

 Service: MemberDelete > Testing deleteMember() succesfully Expected spy navigate to have been called with: [ [ '/members' ] ] but it was never called.

Este es mi archivo de prueba member-delete.service.spec.ts:

 import { HttpClient, HttpResponse} from '@angular/common/http'; import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; import { TestBed, async, inject } from '@angular/core/testing'; import { Router } from '@angular/router'; import { RouterTestingModule } from '@angular/router/testing'; import { memberMockObject } from 'src/app/components/member/member.mocks'; import {createSpyFromClass, Spy} from 'jasmine-auto-spies'; import { MemberDeleteService } from './member-delete.service'; import { environment } from '../../../environments/environment'; describe('Service: MemberDelete', () => { let service: MemberDeleteService; let mockHttp: HttpClientTestingModule; let mockHttpTestingController: HttpTestingController; let router: Router; beforeEach(() => { TestBed.configureTestingModule({ imports:[ HttpClientTestingModule, RouterTestingModule ], providers:[ { provider: MemberDeleteService, useValue: service }, { provider: HttpClient, useValue: createSpyFromClass(HttpClient) } ] }); mockHttp = TestBed.inject(HttpClient); mockHttpTestingController = TestBed.inject(HttpTestingController); service = TestBed.inject(MemberDeleteService); router = TestBed.inject(Router); }); afterEach(() => { mockHttpTestingController.verify(); //Verifies that no requests are outstanding. }); it('should ...', () => { expect(service).toBeTruthy(); }); it('Testing deleteMember() succesfully', () => { spyOn(router, 'navigate'); service.deleteMember(memberMockObject.fakeMember.id); expect(router.navigate).toHaveBeenCalledWith(['/members']); }); });

Este es mi método de servicio de member-delete.service.ts:

 public deleteMember(memberId: number): void { this._http.delete(`${this._membersUrl}/${memberId}`).subscribe({ complete: () => { this.router.navigate( [`/members`] ); }, error: (error) => {this.handleError(error);} }); }

Gracias de antemano, agradezco mucho su ayuda.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

El problema es que no está pasando una respuesta para la delete y nunca va dentro del bloque de subscribe .

Sigue las lineas con !!:

 import { HttpClient, HttpResponse} from '@angular/common/http'; import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; import { TestBed, async, inject } from '@angular/core/testing'; import { Router } from '@angular/router'; import { RouterTestingModule } from '@angular/router/testing'; import { memberMockObject } from 'src/app/components/member/member.mocks'; import {createSpyFromClass, Spy} from 'jasmine-auto-spies'; import { MemberDeleteService } from './member-delete.service'; import { environment } from '../../../environments/environment'; describe('Service: MemberDelete', () => { let service: MemberDeleteService; let mockHttp: HttpClientTestingModule; let mockHttpTestingController: HttpTestingController; let router: Router; beforeEach(() => { TestBed.configureTestingModule({ imports:[ HttpClientTestingModule, RouterTestingModule ], providers:[ // !! remove below line and provide actual service for testing // { provider: MemberDeleteService, useValue: service }, MemberDeleteService, // !! remove below line - HttpClientTestingModule mocks the HttpClient for you // { provider: HttpClient, useValue: createSpyFromClass(HttpClient) } ] }); mockHttp = TestBed.inject(HttpClient); mockHttpTestingController = TestBed.inject(HttpTestingController); service = TestBed.inject(MemberDeleteService); router = TestBed.inject(Router); }); afterEach(() => { mockHttpTestingController.verify(); //Verifies that no requests are outstanding. }); it('should ...', () => { expect(service).toBeTruthy(); }); // !! fakeAsync so we have better control of the subscribe it('Testing deleteMember() succesfully', fakeAsync(() => { spyOn(router, 'navigate'); service.deleteMember(memberMockObject.fakeMember.id); // !! expect a http request (find the pending request) const req = mockhttpTestingController.expectOne(request => request.url.includes(memberMockObject.fakeMember.id)); // !! expect a delete method expect(req.request.method).toBe('Delete)'; // !! flush below response for the pending http call req.flush({}); // !! wait for the subscribe to complete before assertion (tick does this) tick(); expect(router.navigate).toHaveBeenCalledWith(['/members']); })); });
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda