error de prueba de 4 unidades angulares `TypeError: ctor no es un constructor`


90

Estoy tratando de probar mi solucionador de rutas y mientras lo probaba obtuve TypeError: ctor is not a constructory no tengo idea de por qué sucede mientras el tiempo de compilación de mecanografiado no tiene error.

TypeError: ctor is not a constructor
TypeError: ctor is not a constructor
    at _createClass (http://localhost:9877/_karma_webpack_/vendor.bundle.js:42355:26)
    at _createProviderInstance$1 (http://localhost:9877/_karma_webpack_/vendor.bundle.js:42330:26)
    at resolveNgModuleDep (http://localhost:9877/_karma_webpack_/vendor.bundle.js:42315:17)
    at _createClass (http://localhost:9877/_karma_webpack_/vendor.bundle.js:42362:26)
    at _createProviderInstance$1 (http://localhost:9877/_karma_webpack_/vendor.bundle.js:42330:26)
    at resolveNgModuleDep (http://localhost:9877/_karma_webpack_/vendor.bundle.js:42315:17)
    at NgModuleRef_.webpackJsonp../node_modules/@angular/core/@angular/core.es5.js.NgModuleRef_.get (http://localhost:9877/_karma_webpack_/vendor.bundle.js:43401:16)
    at TestBed.webpackJsonp../node_modules/@angular/core/@angular/core/testing.es5.js.TestBed.get (http://localhost:9877/_karma_webpack_/vendor.bundle.js:48412:47)
    at http://localhost:9877/_karma_webpack_/vendor.bundle.js:48418:61
    at Array.map (native)

¿Estás usando ng2 bootstrap
Sibiraj

si. pero estoy probando el solucionador de rutas. es que afecta mi resolución de rutas incluso si no hay html o css
Aniruddha Das

Respuestas:


270

Esto puede ser un error en las declaraciones de los proveedores.

Cuando intenta burlarse de un proveedor y usa useClass en lugar de useValue, se activa el error "TypeError: ctor no es un constructor".

Aquí hay un ejemplo que dispara el error:

providers: [{provide: OrderService, useClass: new OrderServiceMock()}]

La declaración correcta es:

providers: [{provide: OrderService, useValue: new OrderServiceMock()}]

4
Me salvaste el día
Rashmi Kumari

2
Oh, gracias, me habría quedado mirando esto durante demasiado tiempo antes de ver eso.
Michael Guthrie

1
Bueno, qué sabes. No es la primera vez que cometo este error. ¡Ya voté a favor de la respuesta!
Kildareflare

Recibo este error mientras lo hago { provide: httpTestingControllerToken, useClass: HttpTestingController },, donde declaré const httpTestingControllerToken = new InjectionToken<HttpTestingController>('httpTestingControllerToken');... esto es cuando intento reemplazar el obsoleto TestBed.get. ¿Algunas ideas?
lealceldeiro

2

Recibí exactamente el mismo mensaje al crear mi aplicación con AOT.

Mi problema no estaba relacionado con los proveedores como sugirió @abahet.

Fue porque configuré una nueva biblioteca que no era compatible con AOT (y tampoco tenía ningún proveedor). La biblioteca en cuestión tuvo que exportar (estoy hablando de la exportación de TypeScript, no la del módulo Angular) lo que se importó en el módulo (en este caso, un componente y una tubería).


2

Tuve este problema con Angular Universal en combinación con Firebase en un proyecto de Firebase Universal Starter. Casi había perdido la esperanza ya que todas las posibles correcciones en el desbordamiento de pila no ayudaron. Entonces hice lo siguiente:

  1. Actualice todos los paquetes npm con https://www.npmjs.com/package/npm-check-updates
  2. Elimine node_modules y .package-lock.json y vuelva a instalarlos
  3. Se corrigieron todos los errores debido a cambios en la API.
  4. Ahora estaba funcionando :-)

Nunca descubrí qué paquete causó el error, pero una forma de averiguarlo es crear un MockAppModule donde eliminas los módulos uno por uno. Eventualmente encontrarás al que tiene el problema. Pero en mi caso tuve suerte, supongo que debido a que uno de los paquetes con errores se actualizó o algo así.


1

Tercera posibilidad para ti, tenía un módulo que contenía otros módulos y no exporté (en TypeScript) los otros módulos.


1

Yo también tuve este problema con AOT habilitado Agregué un nuevo archivo de servicio. Reinicié el compilador y el problema se resolvió.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.