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

109
Views
Pruebas de Angular2: cambie el valor inyectado de un servicio

Estoy probando un servicio simple. El servicio utiliza 2 valores de otro servicio.

Básicamente, me gustaría probar esos 2 valores: isLogged = false e isLogged = true .

¿Es posible simplemente cambiar el valor de un servicio inyectado o necesito hacer algo más? (que no sé, así que si pudieras guiarme en el camino, te lo agradecería).

Aquí está mi código para probar:

EDITAR He encontrado una solución a mi problema. Debe inyectar el proveedor en los parámetros de inyección , y puede cambiar sus propiedades como desee después.

 import { TestBed, async, inject } from '@angular/core/testing'; import { AuthGuardService } from './authguard.service'; import { Router } from '@angular/router'; import { AuthService } from './auth.service'; describe('AuthguardService', () => { let calledUrl = '/logged/main/last'; let authServiceStub = { isLogged: false, redirectUrl: calledUrl }; class RouterStub { navigate(url: string) { return url; } }; beforeEach(() => { TestBed.configureTestingModule({ providers: [ AuthGuardService, { provide: AuthService, useValue: authServiceStub }, { provide: Router, useClass: RouterStub }, ] }); }); it('should ...', inject([AuthGuardService, Router], (service: AuthGuardService, router: Router) => { let spy = spyOn(router, 'navigate'); service.checkLoginState(calledUrl); expect(spy).toHaveBeenCalledWith(['/login']); })); });
about 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Su solución declarada es de una manera. Si todo lo que desea lograr es cambiar los valores en una prueba, una forma aún más concisa es simplemente cambiar los valores en authServiceStub directamente:

 // inside tests: authServiceStub.isLogged = false; ... authServiceStub.isLogged = true;

^ Simple pero no muy resumido.

O parametrizarlo:

 let isLogged: false; let authServiceStub = { isLogged: isLogged, redirectUrl: calledUrl }; ... // inside tests: isLogged = false; ... isLogged = true;

^ Conciso pero aún no encapsulado.

O agregue un setter:

 let authServiceStub = { isLogged: false, setLogged: function(logged) { this.isLogged = logged; }, redirectUrl: calledUrl }; ... // inside tests: setLogged(false); ... setLogged(true);

^ Un poco más encapsulado. Podría combinarse con su enfoque de inyección.

O si isLogged se volviera a implementar como una función, podría usar spyOn:

 // inside tests: spyOn(authServiceStub, "isLogged").and.returnValue(false); ... spyOn(authServiceStub, "isLogged").and.returnValue(true);

^ Más caja negra y potencialmente más flexible/preparado para el futuro, especialmente si se combina con su solución de inyección (porque podría cambiar el talón o simular drásticamente y aun así obtener el comportamiento que desea). Esto es más trabajo por adelantado, por lo que puede no valer la pena. Pero pensar en AuthService en esta forma de caja negra puede darle una razón para refactorizar isLogged en una función (o no).

about 4 years ago · Santiago Trujillo 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!