web-dev-qa-db-ja.com

angular 4ユニットテストエラー「TypeError:ctor is not constructor」

ルートリゾルバをテストしようとしていますが、テスト中に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)
56
Aniruddha Das

これは、プロバイダーの宣言でエラーになる可能性があります。

プロバイダーのモックを作成し、useValueの代わりにuseClassを使用しようとすると、「TypeError:ctor is not a constructor」というエラーが発生します。

エラーを発生させる例は次のとおりです。

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

正しい宣言は次のとおりです。

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

AOTでアプリを作成するときに、まったく同じメッセージが表示されました。

@abahetが示唆したように、私の問題はプロバイダーに関連していませんでした。

これは、AOTに準拠していない(また、プロバイダーもなかった)新しいライブラリをセットアップしたためです。問題のライブラリはexport(Angularモジュールからのものではなく、TypeScriptエクスポートについて)モジュール(この場合、コンポーネントとパイプ)。

3
maxime1992

Firebase Universal StarterプロジェクトでAngular UniversalとFirebaseを組み合わせてこの問題が発生しました。スタックオーバーフローに関するすべての潜在的な修正が役に立たなかったので、私はほとんど希望を失っていました。だから私は次のことをしました:

  1. すべてのnpmパッケージを https://www.npmjs.com/package/npm-check-updates で更新します
  2. Node_modulesと.package-lock.jsonを削除して再インストールしました
  3. APIの変更によるすべてのエラーを修正
  4. 今では働いていました:-)

どのパッケージがエラーを引き起こしたかはわかりませんでしたが、それを見つける1つの方法は、モジュールを1つずつ削除するMockAppModuleを作成することです。最終的には、問題のあるものが見つかります。しかし、私の場合は、バグのあるパッケージの1つが更新されたか、何かが原因だったと思います。

2
enf0rcer

3番目の可能性として、他のモジュールを含むモジュールがあり、他のモジュールをエクスポート(TypeScriptで言えば)しませんでした。

1

私もAOTを有効にしてこの問題を抱えていました。新しいサービスファイルを追加しました。コンパイラを再起動すると、問題は解決しました。

0
6by3