我目前正在使用angullar-cli处理angular2项目。从tomorow开始,我从ng test命令中得到一个新的错误,下面的跟踪。每次运行测试命令时都会触发此错误。我在spec.ts中识别出引发错误的代码:
const fakeRouter = jasmine.createSpyObj('Router', ['navigate']);
beforeEach(() => TestBed.configureTestingModule({
imports: [AppModule, RouterTestingModule],
providers: [{ provide: Router, useValue: fakeRouter }]
}));
当我删除提供商路由器时,错误消失。 但是,我的所有测试都成功通过。
我的angular-cli版本:
angular-cli:1.0.0-beta.32.3 节点:6.7.0 os:win32 x64
错误:
ERROR: 'Unhandled Promise rejection:', 'Cannot set property 'afterPreactivation' of undefined', '; Zone:', 'ProxyZone', '; Task:', 'Promise.then', '; Value:', TypeError{}, 'TypeError: Cannot set property 'afterPreactivation' of undefined
at http://localhost:9876/base/src/test.ts?10abbba6756b062e1f8ba4c1873d1f257bc67f65:66907:49
at ZoneDelegate.invoke (http://localhost:9876/base/src/test.ts?10abbba6756b062e1f8ba4c1873d1f257bc67f65:94256:26)
at ProxyZoneSpec.onInvoke (http://localhost:9876/base/src/test.ts?10abbba6756b062e1f8ba4c1873d1f257bc67f65:70192:39)
at ZoneDelegate.invoke (http://localhost:9876/base/src/test.ts?10abbba6756b062e1f8ba4c1873d1f257bc67f65:94255:32)
at Zone.run (http://localhost:9876/base/src/test.ts?10abbba6756b062e1f8ba4c1873d1f257bc67f65:94052:43)
at http://localhost:9876/base/src/test.ts?10abbba6756b062e1f8ba4c1873d1f257bc67f65:94605:57
at ZoneDelegate.invokeTask (http://localhost:9876/base/src/test.ts?10abbba6756b062e1f8ba4c1873d1f257bc67f65:94289:31)
at ProxyZoneSpec.onInvokeTask (http://localhost:9876/base/src/test.ts?10abbba6756b062e1f8ba4c1873d1f257bc67f65:70216:39)
at ZoneDelegate.invokeTask (http://localhost:9876/base/src/test.ts?10abbba6756b062e1f8ba4c1873d1f257bc67f65:94288:36)
at Zone.runTask (http://localhost:9876/base/src/test.ts?10abbba6756b062e1f8ba4c1873d1f257bc67f65:94092:47)
at drainMicroTaskQueue (http://localhost:9876/base/src/test.ts?10abbba6756b062e1f8ba4c1873d1f257bc67f65:94455:35)
答案 0 :(得分:1)
我找到了解决问题的方法。我在测试中用所需的所有模块,组件和服务替换了appModule的导入。我认为存在错误,因为appmodule也会导入路由器模块。
beforeEach(() => TestBed.configureTestingModule({
declarations: [component1, component2, ...],
imports: [module1, module2, ...],
providers: [service1, service2, { provide: Router, useValue: fakeRouter }]
}));