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

129
Vistas
¿Debo probar este código? (asignación de llamada de método inmediato al miembro de la clase)
class MyClassComponent { hasAccess = this.hasAccessToSomething(); constructor(private numberService: NumberService) {} private hasAccessToSomething(): boolean { return this.numberService.getNumber() > 5; } }

¿Debo probar hasAccess es igual a false o true dependiendo del valor de numberService.getNumber() ? Este es un estado de clase inicial en el que llamé a un método privado, un método que se supone que no debe probarse, y asigné su valor a mi miembro de clase pública.

Si la respuesta es sí, ¿cómo hacerlo usando jasmine/jest con TestBed?

 let component: MyClassComponent; beforeEach(() => { TestBed.configureTestingModule({ providers: [ MyClassComponent, NumberService ] }); component = TestBed.inject(MyClassComponent); });

Podría simular el método NumberService.getNumber , pero el problema es que después de crear el simulacro, no puedo reiniciar la asignación hasAccess . Podría llamar a this.hasAccessToSomething en, por ejemplo ngOnInit y luego probar el valor de hasAccess llamando nuevamente a ngOnInit , pero no me gustaría complicar la clase para fines de prueba. Con una clase tan fácil, podría deshacerme de TestBed y reinicializar el componente usando new MyClassComponent , pero imaginemos que esta clase es mucho más grande con muchas más dependencias.

¿Cómo lo harías tú?

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

0

Puede usar jasmine.Spy para tal fin y convertir hasAccess en una propiedad getter:

 export class MyClassComponent { public get hasAccess(): boolean { return this.hasAccessToSomething() } ...

Dentro de sus pruebas:

 describe('MyClassComponent', () => { beforeEach(async () => { TestBed.configureTestingModule({ providers: [ MyClassComponent, NumberService ] }); ... }) it('should have access if numberService.getNumber() returns more than 5', () => { spyOn(TestBed.inject(NumberService), 'getNumber').and.returnValue(6) expect(component.hasAccess).toBeTrue() }) it('should not have access if numberService.getNumber() returns less than 5', () => { spyOn(TestBed.inject(NumberService), 'getNumber').and.returnValue(4) expect(component.hasAccess).toBeFalse() }) })

si NO desea convertir hasAccess en una propiedad getter , debe definir el alcance de la creación del componente justo antes de burlarse/espiar el servicio mediante el uso de bloques de descripción anidados:

 describe('MyComponent...', () => { beforeEach(() => /*build the module*/) describe('when NumberService.getNumber returns more than 5', () => { beforeEach(() => { spyOn(TestBed.inject(NumberService), 'getNumber').and.returnValue(6) component = ... }) it('should have access', () => expect(component.hasAccess).toBeTrue()) }) // Symmetric for less than 5
about 4 years ago · Juan Pablo Isaza Denunciar

0

creo que eso es lo que buscas

 let component: MyClassComponent; beforeEach(() => { TestBed.configureTestingModule({ providers: [MyClassComponent, NumberService], }); }); describe("with default NumberService result", () => { beforeEach(() => { component = TestBed.inject(MyClassComponent); }); it('should ....',()=>{...}) }); describe("with mocked NumberService result", () => { beforeEach(() => { TestBed.overrideProvider(NumberService, { useValue: { getNumber: () => 999 }, }); component = TestBed.inject(MyClassComponent); }); it('should ....',()=>{...}) });
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