Después de cambiar a Angular 5.2.3 y ejecutar ng cli con una regla de linter de "deprecation": true , recibo el siguiente error en muchas de mis pruebas:
get is deprecated: from v4.0.0 use Type<T> or InjectionToken<T>La línea que se queja es algo así como
fixture.debugElement.injector.get(MyService) siendo MyService una clase utilizada para la inyección de dependencia.
No puedo adivinar cuál se supone que es la nueva sintaxis, ya que
fixture.debugElement.injector.get<MyService>(MyService) da un error de compilación que indica que el Argument of type 'typeof MyService' is not assignable to parameter of type 'Type<MyService> | InjectionToken<MyService>'.
¿Cuál es la forma correcta de usar el inyector para evitar errores de desaprobación?
Editar: vea la respuesta a continuación, para la actualización de Angular9.
Editar: parece estar relacionado con que MyService sea una clase abstracta. Si uso una clase no abstracta, la .get<T>(T) funciona.
Editar: Aparentemente, la solución está pendiente de algún trabajo de relaciones públicas: https://github.com/angular/angular/pull/25222
Mejor puede intentar convertir su servicio como Tipo y luego usar un inyector como este:
import { Type } from '@angular/core'; fixture.debugElement.injector.get<MyService>(MyService as Type<MyService>)ACTUALIZACIÓN: para Angular9, la sintaxis ha cambiado a esto:
TestBed.inject<IDataService>(IDataService) .
Esto también funciona para clases abstractas.
En VSCode, puede arreglar la mayoría de sus casos con esto
FIND: TestBed.get\(([^\)]+)\) as .*; REPLACE: TestBed.inject<$1>($1);PRE Angular 9. Por lo tanto, parece estar relacionado con clases abstractas frente a clases no abstractas.
He publicado mis hallazgos aquí: https://github.com/angular/angular/issues/22063 en caso de que alguien tenga el mismo problema.
Como una solución temporal, puede intentar lo siguiente:
fixture.debugElement.injector.get<MyService>(MyService as any)