2017-06-16 109 views
18

我想測試我的路由解析器,而測試時我得到了TypeError: ctor is not a constructor,不知道爲什麼它發生,而typecript編譯時沒有錯誤。角度4單元測試錯誤`TypeError:ctor不是構造函數`

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

你使用的是ng2 bootstrap –

+0

是的。但我正在測試路由解析器。是否影響我的路由解析器,即使沒有HTML或CSS –

回答

46

這可能是提供者聲明中的錯誤。

當您嘗試模擬提供程序並使用useClass而不是useValue時,會觸發錯誤「TypeError:ctor不是構造函數」。

這裏是觸發該錯誤的例子:

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

正確的聲明是:

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

您節省了我的一天 –

2

我建立我的應用程序與AOT時有完全相同的信息。

我的問題與@abahet建議的提供者無關。

這是因爲我設置了一個不符合AOT的新庫(並且沒有任何提供者)。問題庫必須export(我在談論Typescript導出,而不是來自Angular模塊的導出)在模塊(在這種情況下,組件和管道)中導入了什麼。

1

你的第三種可能性,我有一個模塊包含其他模塊,並沒有導出(Typescript說)其他模塊。

0

我在Firebase Universal Starter項目中將Angular Universal與Firebase結合使用時遇到了此問題。我幾乎失去了希望,因爲堆棧溢出的所有潛在修復都無濟於事。所以,我做了以下內容:

  1. 更新所有NPM封裝,https://www.npmjs.com/package/npm-check-updates
  2. 刪除node_modules和。包裝,lock.json並重新安裝它們
  3. 修正所有錯誤,由於改變了API的
  4. 現在它正在:-)

我從來沒有發現哪個軟件包導致了錯誤,但找到的一種方法是創建一個MockAppModule,您可以逐個刪除模塊。最終你會發現問題所在。但在我的情況下,我很幸運,我猜是由於其中一個竊聽包被更新了。