Posible reparación: inject() must be called from an injection en Angular

Angular

Estos días he estado migrando una app de Angular 14 a Angular 16 y entre tantos cambios, hay un sub-proyecto que tenemos que vincular y también actualizarlo a Angular 16. Resulta que al hacer la actualización recibíamos el error:

NG0203: inject() must be called from an injection context such as a constructor, a factory function, a field initializer, or a function used with...

Lo raro es que no se usa inject aquí, se utiliza Dependency Injection como es más estándar, y el error pasaba solo en unas pruebas. Buscando muchísimo en internet nadie hablaba de esta posibilidad… así que si llegaste hasta aquí, y estás sufriendo por este error como yo sin dar con una solución, aquí te va… peeero antes de ello quiero decir que esto nos sucedió con Angular 16 + Jest en pruebas unitarias únicamente, no nos sucedía en el proyecto en sí mismo por lo que era aún más raro, ahora sí ahí va…

El problema no estaba en el código como tal, estaba en que el sub-proyecto lo vinculábamos con npm link y el problema es que estaba en que no se vinculaba para pruebas correctamente… para ello te dan la opción de poner preserveSymLinks: true en el angular.json pero tampoco nos servía puesto que esto está hecho con ng-packagr haciendo que sea aún más complejo encontrar la forma ya que en lo anteriormente mencionado te dicen que lo pongas en el architect.build.options pero ahí no puede entrar con esta configuración así que… bueno, ¿y mi “posible reparación on’ ta”?, el problema entonces es npm link, ¿cómo lo solucionamos?, simple… dejamos de usar npm link y ahora usamos el repositorio como vía.

Compilamos el proyecto, generamos una rama temporal y empujamos el proyecto para que compilado en el root, así entonces, instalamos desde `npm install git+ssh://[email protected]/usuario/repositorio#rama_compilada solo es acomodar esto para su propio repo y tan tan, nos quitamos el problema de encima.

Así que ya saben, si tienen este problema con pruebas, el problema no es con su código, es el npm link que tiene un error aquí… pero ya saben que pueden resolver con preserveSymLinks si no usan ng-packagr y si lo usan y no los deja compilen y usen un repo intermediario mientras terminan…

¡Nos vemos en el próximo tutorial!

¿Cuál es tu reacción?
+1
0
+1
0
+1
0
+1
0
+1
0
Total
0
Shares
Publicación anterior

Después de más de medio siglo, la NASA vuelve a la Luna en una posición diferente: como pasajera pagando por el viaje, en lugar de liderar su propia misión

Siguiente Publicación
Angular

Cómo sobre-cargar MatIcon para usar íconos personalizados en pruebas en Angular

Publicaciones Relacionadas