Winkelfehler beim Testen von 4 Einheiten `TypeError: ctor ist kein Konstruktor`


86

Ich versuche meinen Routenauflöser zu testen und beim Testen habe ich TypeError: ctor is not a constructorkeine Ahnung warum es passiert, während Typoskript-Kompilierungszeit kein Fehler ist.

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)

Verwenden Sie ng2 Bootstrap
Sibiraj

Ja. aber ich teste Route Resolver. Beeinflusst das meinen Routenauflöser, auch wenn es weder HTML noch CSS gibt?
Aniruddha Das

Antworten:


265

Dies kann ein Fehler in den Anbietererklärungen sein.

Wenn Sie versuchen, einen Anbieter zu verspotten und useClass anstelle von useValue zu verwenden, wird der Fehler "TypeError: ctor ist kein Konstruktor" ausgelöst.

Hier ist ein Beispiel, das den Fehler auslöst:

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

Die korrekte Erklärung lautet:

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

4
Du hast meinen Tag gerettet
Rashmi Kumari

2
Oh danke, ich hätte das viel zu lange angestarrt, bevor ich das gesehen hätte.
Michael Guthrie

1
Nun, was weißt du? Nicht das erste Mal, dass ich diesen Fehler gemacht habe. Habe die Antwort schon positiv bewertet!
Kildareflare

Ich erhalte diesen Fehler { provide: httpTestingControllerToken, useClass: HttpTestingController },, wenn ich mache , wo ich erklärt habe const httpTestingControllerToken = new InjectionToken<HttpTestingController>('httpTestingControllerToken');... dies ist, wenn ich versuche, das veraltete zu ersetzen TestBed.get. Irgendwelche Ideen?
Lealceldeiro

2

Ich hatte genau die gleiche Nachricht beim Erstellen meiner App mit AOT.

Mein Problem hatte nichts mit Anbietern zu tun, wie @abahet vorgeschlagen hatte.

Das lag daran, dass ich eine neue Bibliothek eingerichtet habe, die nicht AOT-kompatibel war (und auch keinen Anbieter hatte). Die betreffende Bibliothek musste exportieren (ich spreche vom Typescript-Export, nicht vom Angular-Modul), was in das Modul importiert wurde (in diesem Fall eine Komponente und eine Pipe).


2

Ich hatte dieses Problem mit Angular Universal in Kombination mit Firebase in einem Firebase Universal Starter-Projekt. Ich hatte fast die Hoffnung verloren, da alle möglichen Korrekturen am Stapelüberlauf nicht geholfen hatten. Also habe ich folgendes gemacht:

  1. Aktualisieren Sie alle npm-Pakete mit https://www.npmjs.com/package/npm-check-updates
  2. Entfernen Sie node_modules und .package-lock.json und installieren Sie sie erneut
  3. Alle Fehler aufgrund geänderter APIs wurden behoben
  4. Jetzt hat es funktioniert :-)

Ich habe nie herausgefunden, welches Paket Fehler verursacht hat, aber ein Ansatz, um dies herauszufinden, besteht darin, ein MockAppModule zu erstellen, in dem Sie Module nacheinander entfernen. Schließlich finden Sie den mit dem Problem. Aber in meinem Fall hatte ich Glück, weil eines der fehlerhaften Pakete aktualisiert wurde oder so.


1

Dritte Möglichkeit für Sie: Ich hatte ein Modul mit anderen Modulen und habe die anderen Module nicht exportiert (Typoskript).


1

Ich hatte auch dieses Problem mit AOT aktiviert. Ich habe eine neue Servicedatei hinzugefügt. Ich habe den Compiler neu gestartet und das Problem ist behoben.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.