ルートリゾルバをテストしようとしていますが、テスト中にTypeError: ctor is not a constructor
を取得しましたが、TypeScriptのコンパイル時にエラーが発生しない理由はわかりません。
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)
これは、プロバイダーの宣言でエラーになる可能性があります。
プロバイダーのモックを作成し、useValueの代わりにuseClassを使用しようとすると、「TypeError:ctor is not a constructor」というエラーが発生します。
エラーを発生させる例は次のとおりです。
providers: [{provide: OrderService, useClass: new OrderServiceMock()}]
正しい宣言は次のとおりです。
providers: [{provide: OrderService, useValue: new OrderServiceMock()}]
AOTでアプリを作成するときに、まったく同じメッセージが表示されました。
@abahetが示唆したように、私の問題はプロバイダーに関連していませんでした。
これは、AOTに準拠していない(また、プロバイダーもなかった)新しいライブラリをセットアップしたためです。問題のライブラリはexport(Angularモジュールからのものではなく、TypeScriptエクスポートについて)モジュール(この場合、コンポーネントとパイプ)。
Firebase Universal StarterプロジェクトでAngular UniversalとFirebaseを組み合わせてこの問題が発生しました。スタックオーバーフローに関するすべての潜在的な修正が役に立たなかったので、私はほとんど希望を失っていました。だから私は次のことをしました:
どのパッケージがエラーを引き起こしたかはわかりませんでしたが、それを見つける1つの方法は、モジュールを1つずつ削除するMockAppModuleを作成することです。最終的には、問題のあるものが見つかります。しかし、私の場合は、バグのあるパッケージの1つが更新されたか、何かが原因だったと思います。
3番目の可能性として、他のモジュールを含むモジュールがあり、他のモジュールをエクスポート(TypeScriptで言えば)しませんでした。
私もAOTを有効にしてこの問題を抱えていました。新しいサービスファイルを追加しました。コンパイラを再起動すると、問題は解決しました。