Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

433
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!