angular 4 unit testing error `TypeError: ctor is not a constructor`
angular 4 unit testing error `TypeError: ctor is not a 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 (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 (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)
这可能是提供商声明中的错误。
当您尝试模拟提供者并使用 useClass 而不是 useValue 时,会引发错误 "TypeError: ctor is not a constructor"。
这是引发错误的示例:
providers: [{provide: OrderService, useClass: new OrderServiceMock()}]
正确的声明是:
providers: [{provide: OrderService, useValue: new OrderServiceMock()}]
我在使用 AOT 构建我的应用程序时收到了完全相同的消息。
我的问题与@abahet 建议的提供商无关。
这是因为我设置了一个不符合 AOT 的新库(也没有任何提供程序)。有问题的库必须 export (我说的是 Typescript 导出,而不是 Angular 模块中的那个)模块中导入的内容(在本例中是一个组件和一根管子)。
第三种可能性,我有一个包含其他模块的模块并且没有导出(Typescript 来说)其他模块。
我在 Firebase Universal Starter 项目中将 Angular Universal 与 Firebase 结合使用时遇到了这个问题。我几乎失去了希望,因为堆栈溢出的所有潜在修复都无济于事。所以我做了以下事情:
- 使用 https://www.npmjs.com/package/npm-check-updates
更新所有 npm 包
- 删除 node_modules 和 .package-lock.json 并重新安装它们
- 修复了由于更改 api 的
而导致的所有错误
- 现在可以使用了:-)
我从来没有发现是什么包导致了错误,但是找出错误的一种方法是创建一个 MockAppModule,您可以在其中一个一个地删除模块。最终你会找到有问题的那个。但就我而言,我很幸运,我猜是因为其中一个有问题的软件包得到了更新或其他原因。
我也遇到了 AOT 的这个问题 enabled.I 添加了一个新的服务文件。我重新启动了编译器,问题就解决了。
我正在尝试测试我的路由解析器,在测试时我得到了 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 (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 (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)
这可能是提供商声明中的错误。
当您尝试模拟提供者并使用 useClass 而不是 useValue 时,会引发错误 "TypeError: ctor is not a constructor"。
这是引发错误的示例:
providers: [{provide: OrderService, useClass: new OrderServiceMock()}]
正确的声明是:
providers: [{provide: OrderService, useValue: new OrderServiceMock()}]
我在使用 AOT 构建我的应用程序时收到了完全相同的消息。
我的问题与@abahet 建议的提供商无关。
这是因为我设置了一个不符合 AOT 的新库(也没有任何提供程序)。有问题的库必须 export (我说的是 Typescript 导出,而不是 Angular 模块中的那个)模块中导入的内容(在本例中是一个组件和一根管子)。
第三种可能性,我有一个包含其他模块的模块并且没有导出(Typescript 来说)其他模块。
我在 Firebase Universal Starter 项目中将 Angular Universal 与 Firebase 结合使用时遇到了这个问题。我几乎失去了希望,因为堆栈溢出的所有潜在修复都无济于事。所以我做了以下事情:
- 使用 https://www.npmjs.com/package/npm-check-updates 更新所有 npm 包
- 删除 node_modules 和 .package-lock.json 并重新安装它们
- 修复了由于更改 api 的 而导致的所有错误
- 现在可以使用了:-)
我从来没有发现是什么包导致了错误,但是找出错误的一种方法是创建一个 MockAppModule,您可以在其中一个一个地删除模块。最终你会找到有问题的那个。但就我而言,我很幸运,我猜是因为其中一个有问题的软件包得到了更新或其他原因。
我也遇到了 AOT 的这个问题 enabled.I 添加了一个新的服务文件。我重新启动了编译器,问题就解决了。