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

450
Vistas
Cómo forzar la llamada `super.ngOnDestroy`

Tengo una clase abstracta que ayuda a evitar el código repetitivo (para cancelar la suscripción de observables), se ve así:

 export abstract class SubscriptionManagmentDirective implements OnDestroy { componetDestroyed = new Subject<void>() constructor() {} ngOnDestroy(): void { this.componetDestroyed.next() this.componetDestroyed.unsubscribe() } }

En algunos casos, sucedió que ngOnDestroy y olvidé llamar a super.ngOnDestroy() y luego las suscripciones se volvieron locas. Agregué una prueba de unidad a los componentes de extensión para probar que se han cancelado las suscripciones, pero para hacerlo, tengo que recordar agregarlos.

Mi pregunta es,

  • ¿Hay alguna manera de forzar que se llame a super.ngOnDestroy() cada vez que se extienda el componente?
  • ¿O hay alguna manera de escribir una prueba unitaria para la clase abstracta que se probaría en cualquier componente que amplíe esa clase?

Cualquier ayuda será apreciada, gracias.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Creo que el mejor enfoque para esto sería agregar "noImplicitOverride": true to your tsconfig. No necesariamente lo ayudará a recordar llamar a un supermétodo, pero lo obligará a ser explícito acerca de la anulación de métodos, arrojando un error de compilación en los casos en que anule un método sin usar la palabra clave override . Luego, depende del desarrollador decidir si el supermétodo debe llamarse o no.

https://www.typescriptlang.org/tsconfig#noImplicitOverride

over 4 years ago · Santiago Trujillo Denunciar

0

Solo puedo pensar en una forma, muy rara y fea. Una cosa que se aplica es la llamada super() en el constructor, por parte de TypeScript. Por lo tanto, podrías

 class Foo { constructor() { const oldNgOnDestroy = this.ngOnDestroy; this.ngOnDestroy = function() { console.log("decorated ngOnDestroy"); return oldNgOnDestroy(); }.bind(this); } ngOnDestroy() { console.log("original ngOnDestroy"); } } class Bar extends Foo { constructor() { super(); } } class Baz extends Foo { constructor() { super(); } ngOnDestroy() { console.log("custom ngOnDestroy"); } } const bar = new Bar(); bar.ngOnDestroy(); const baz = new Baz(); baz.ngOnDestroy();

Como dije, hacky y feo.

over 4 years ago · Santiago Trujillo Denunciar

0

  1. No, no existe tal forma de llamar automáticamente al método desde un resumen.

  2. Tienes que hacer pruebas unitarias solo de forma aislada. Simplemente cree una clase de prueba en línea que amplíe su resumen y luego pruebe la unidad ngOnDestroy . Es totalmente suficiente.

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