2017-06-16 162 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,您可以逐个删除模块。最终你会发现问题所在。但在我的情况下,我很幸运,我猜是由于其中一个窃听包被更新了。