2017-06-16 4 views
18

J'essaie de tester mon résolveur d'itinéraire et tout en testant j'ai obtenu TypeError: ctor is not a constructor et aucune idée de pourquoi cela se produit pendant que le script de tapage ne fait pas erreur.angulaire 4 erreur de test unitaire `TypeError: ctor n'est pas un constructeur`

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) 
+0

utilisez-vous ng2 bootstrap –

+0

oui. mais je suis en train de tester le résolveur de route. est-ce que cela affecte mon résolveur d'itinéraire même s'il n'y a pas de code html ou css –

Répondre

46

Cela peut être une erreur dans les déclarations des fournisseurs.

Lorsque vous essayez de simuler un fournisseur et utilisez 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()}] 
+0

Vous avez sauvé ma journée –

2

J'ai eu exactement le même message lors de la construction de mon application avec AOT.

Mon problème n'était pas lié aux fournisseurs comme suggéré par @abahet. C'est parce que j'ai installé une nouvelle bibliothèque qui n'était pas conforme AOT (et n'avait pas de fournisseur non plus). La bibliothèque en question devait exporter (je parle de l'export de type, pas celui du module Angular) ce qui a été importé dans le module (dans ce cas, un composant et un tuyau).

1

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

0

J'ai eu ce problème avec Angular Universal en combinaison avec Firebase dans un projet Firebase Universal Starter. J'avais presque perdu espoir car tous les correctifs potentiels sur le débordement de pile n'a pas aidé. Donc, je l'ai fait ce qui suit:

  1. mise à jour tous les paquets MNP avec https://www.npmjs.com/package/npm-check-updates
  2. Retirer node_modules et .package-lock.json et les réinstallée
  3. fixe toutes les erreurs dues à
  4. APIs changé Maintenant, il travaillait :-)

Je n'ai jamais découvert quel paquet a provoqué une erreur, mais une approche à découvrir est de créer un MockAppModule où vous supprimez les modules un par 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'un des paquets buggés mis à jour ou quelque chose.