我正在尝试测试我的路由解析器,并且在测试时我得到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)
答案 0 :(得分:161)
这可能是提供者声明中的错误。
当您尝试模拟提供程序并使用useClass而不是useValue时,错误" TypeError:ctor不是构造函数"被解雇了。
以下是触发错误的示例:
providers: [{provide: OrderService, useClass: new OrderServiceMock()}]
正确的声明是:
providers: [{provide: OrderService, useValue: new OrderServiceMock()}]
答案 1 :(得分:3)
使用AOT构建我的应用时,我收到完全相同的消息。
我的问题与@abahet建议的提供商无关。
这是因为我设置了一个不符合AOT标准的新库(并且没有任何提供商)。有问题的库必须导出(我在谈论Typescript导出,而不是Angular模块中的导出)在模块中导入的内容(在本例中是组件和管道)。
答案 2 :(得分:2)
我在Firebase Universal Starter项目中将Angular Universal与Firebase结合使用时出现此问题。我几乎失去了希望,因为堆栈溢出的所有潜在修复都没有帮助。所以我做了以下事情:
我从来没有发现什么包导致错误,但找到的一种方法是创建一个MockAppModule,您可以逐个删除模块。最终你会找到有问题的那个。但在我的情况下,我很幸运,我猜是因为其中一个漏洞的软件包得到了更新或其他内容。
答案 3 :(得分:1)
第三种可能性,我有一个包含其他模块的模块,并且没有导出(打字稿)其他模块。
答案 4 :(得分:0)
启用AOT时我也遇到了这个问题。我添加了一个新的服务文件。我重新启动了编译器,问题已解决。