Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

339
Visualizações
Prueba unitaria de Angular2: probando el constructor de un componente

Todo está en el título: ¿cómo se puede probar lo que se hace en el constructor del componente?

Para su información, estoy usando un servicio que requiere una configuración y me gustaría ver si los 2 métodos que llamo en el constructor se llaman correctamente.

El constructor de mi componente:

 constructor( public router: Router, private profilService: ProfileService, private dragula: DragulaService, private alerter: AlertService ) { dragula.drag.subscribe((value) => { this.onDrag(value); }); dragula.dragend.subscribe((value) => { this.onDragend(value); }); }
about 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Inyectaría un servicio falso usando el sistema DI, lo que significaría escribir las pruebas de esta manera:

 describe('your component', () => { let fixture: ComponentFixture<YourComponent>; let fakeService; let dragSubject = new ReplaySubject(1); ... beforeEach(async(() => { fakeService = { drag: dragSubject.asObservable(), ... }; TestBed.configureTestingModule({ declarations: [YourComponent, ...], providers: [ { provide: DragulaService, useValue: fakeService }, ... ], }); })); beforeEach(() => { fixture = TestBed.createComponent(YourComponent); fixture.detectChanges(); }); it('should do something when a drag event occurs', () => { dragSubject.next({ ... }); fixture.detectChanges(); ... }); });

Esto le permite activar "eventos de arrastre" cuando lo desee llamando a .next sobre el tema, lo que hace que se llame a los suscriptores de los campos en el servicio falso. Luego puede hacer afirmaciones sobre los resultados que espera de eso.

Tenga en cuenta que no necesita llamar al constructor usted mismo; este método se invoca cuando el sistema DI crea una instancia de su componente, es decir, cuando se llama TestBed.createComponent .

Recomendaría que no espíes los métodos de los componentes (p. ej. this.onDrag ) y solo te asegures de que los llamen, sino que pruebes que lo que sea que esos métodos deban hacer como resultado suceda; esto hace que las pruebas sean más robustas a los cambios en la implementación específica (escribí un poco sobre esto en mi blog: http://blog.jonrshar.pe/2017/Apr/16/async-angular-tests.html ).

about 4 years ago · Santiago Trujillo Relatório

0

La forma sencilla de probar cualquier cosa dentro de la función constructora es crear una instancia de componente y luego probarla.

 it('should call initializer function in constructor', () => { TestBed.createComponent(HomeComponent); // this is the trigger of constructor method expect(sideNavService.initialize).toHaveBeenCalled(); // sample jasmine spy based test case });

Una cosa a tener en cuenta es que, si desea distinguir entre constructor y ngOnInit, no llame a fixture.detectChanges() dentro beforeEach() . en su lugar, llame manualmente cuando lo necesite.

about 4 years ago · Santiago Trujillo Relatório

0

Dado que OP dice "Me gustaría ver si los 2 métodos a los que llamo en el constructor se llaman correctamente". Tengo un mejor enfoque.

Escribe una prueba unitaria. No necesita usar el banco de pruebas para esto. Ralentizará mucho tus pruebas. Instancia tus simulacros manualmente. Establezca sus espías en los métodos que le interesan y luego llame al constructor del componente manualmente con los stubs que ha creado instancias y en los que ha configurado los espías. Luego pruebe si los métodos espiados se han llamado correctamente.

La clave es extender sus stubs de las clases de servicio originales. jasmine.createSpyObj ayuda a burlarse de clases angulares como Router .

about 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda