web-dev-qa-db-fra.com

angular Erreur de test de 4 unités `TypeError: ctor n'est pas un constructeur`

J'essaie de tester mon résolveur d'itinéraire et, pendant les tests, j'ai eu TypeError: ctor is not a constructor et aucune idée pourquoi cela se produit alors que TypeScript compile le temps sans erreur.

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)
56
Aniruddha Das

Cela peut être une erreur dans les déclarations du fournisseur.

Lorsque vous essayez de simuler un fournisseur et d'utiliser useClass au lieu de useValue, l'erreur "TypeError: ctor n'est pas un constructeur" est déclenchée.

Voici un exemple qui déclenche l'erreur:

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

La déclaration correcte est:

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

J'avais exactement le même message lorsque j'ai créé mon application avec AOT.

Mon problème n'était pas lié aux prestataires, comme @abahet l'a suggéré.

C’est parce que j’ai installé une nouvelle bibliothèque non compatible AOT (et n’avait aucun fournisseur non plus). La bibliothèque en question devait exporter (je parle d’exportation TypeScript, pas celle de Angular)) de ce qui a été importé dans le module (dans ce cas, un composant et un tuyau).

3
maxime1992

J'ai eu ce problème avec Angular Universal associé à Firebase dans un projet Firebase Universal Starter. J'avais presque perdu tout espoir car tous les correctifs potentiels liés au débordement de pile ne permettaient pas de résoudre ce problème. J'ai donc procédé comme suit:

  1. Mettez à jour tous les paquets npm avec https://www.npmjs.com/package/npm-check-updates
  2. Supprimez node_modules et .package-lock.json et réinstallez-les.
  3. Correction de toutes les erreurs dues aux API modifiées
  4. Maintenant cela fonctionnait :-)

Je n'ai jamais trouvé le paquet qui a causé l'erreur, mais une solution consiste à créer un MockAppModule dans lequel vous supprimez des modules un à un. Finalement, vous trouverez celui avec le problème. Mais dans mon cas, j’ai eu de la chance, je suppose, en raison de l’actualisation de quelque chose de ce type de paquet.

2
enf0rcer

Troisième possibilité pour vous, j'avais un module contenant d'autres modules et je n'avais pas exporté (TypeScript parlant) les autres modules.

1

Moi aussi j'ai eu ce problème avec AOT activé. J'ai ajouté un nouveau fichier de service. J'ai redémarré le compilateur et le problème est résolu.

0
6by3