在单元测试中无法解析路由器的所有参数:(?,?,?,?,?,?,?)在单元测试中
我刚刚升级到Angular RC 5,现在所有使用'ROUTER_DIRECTIVES' '尝试单元测试组件时无法解析路由器的所有参数:(?,?,?,?,?,?,?)'。在单元测试中无法解析路由器的所有参数:(?,?,?,?,?,?,?)在单元测试中
import { inject, addProviders } from '@angular/core/testing';
import { ComponentFixture, TestComponentBuilder } from '@angular/core/testing';
import { Component } from '@angular/core';
import { ROUTER_DIRECTIVES, Router } from '@angular/router';
import { HomeComponent } from './home.component';
import { UserService } from '../_services/user.service';
describe('Component: Home',() => {
beforeEach(() => {
addProviders([HomeComponent, UserService, ROUTER_DIRECTIVES, Router]);
});
it('should inject the component', inject([HomeComponent, UserService, ROUTER_DIRECTIVES, Router],
(component: HomeComponent) => {
expect(component).toBeTruthy();
// expect(component.currentUser.firstname).toEqual('Jan');
}));
完整的错误日志:
Chrome 52.0.2743 (Windows 10 0.0.0)
Error: Can't resolve all parameters for Router: (?, ?, ?, ?, ?, ?, ?).
at new BaseException (webpack:///C:/ng/anbud/~/@angular/compiler/src/facade/exceptions.js:27:0 <- src/test.ts:2943:23)
at CompileMetadataResolver.getDependenciesMetadata (webpack:///C:/ng/anbud/~/@angular/compiler/src/metadata_resolver.js:551:0 <- src/test.ts:24542:19)
at CompileMetadataResolver.getTypeMetadata (webpack:///C:/ng/anbud/~/@angular/compiler/src/metadata_resolver.js:448:0 <- src/test.ts:24439:26)
at webpack:///C:/ng/anbud/~/@angular/compiler/src/metadata_resolver.js:594:0 <- src/test.ts:24585:41
at Array.forEach (native)
at CompileMetadataResolver.getProvidersMetadata (webpack:///C:/ng/anbud/~/@angular/compiler/src/metadata_resolver.js:575:0 <- src/test.ts:24566:19)
at CompileMetadataResolver.getNgModuleMetadata (webpack:///C:/ng/anbud/~/@angular/compiler/src/metadata_resolver.js:305:0 <- src/test.ts:24296:58)
at RuntimeCompiler._compileComponents (webpack:///C:/ng/anbud/~/@angular/compiler/src/runtime_compiler.js:150:0 <- src/test.ts:37986:47)
at RuntimeCompiler._compileModuleAndAllComponents (webpack:///C:/ng/anbud/~/@angular/compiler/src/runtime_compiler.js:78:0 <- src/test.ts:37914:37)
at RuntimeCompiler.compileModuleAndAllComponentsSync (webpack:///C:/ng/anbud/~/@angular/compiler/src/runtime_compiler.js:52:0 <- src/test.ts:37888:21)
任何想法如何单元测试组件具有路由?
终于能修复它,它是如此简单:
beforeEach(() => addProviders([
{
provide: Router,
useClass: class { navigate = jasmine.createSpy("navigate"); }
}]));
在这里,您可以用茉莉的测试。 'expect(router.navigate).toHaveBeenCalledWith(['/ success']);' – GlacialFlames
在2.0.0中,当将其添加到NgModule的提供者部分时也可以使用: 提供者: , useClass:class {navigate = jasmine.createSpy(“navigate”); } }]' – bas
尝试增加RouterModule:
import { ROUTER_DIRECTIVES, Router, RouterModule } from '@angular/router';
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
...
{provide: Router, useClass: RouterModule},
});
});
对于某些组件,使用此方法会导致错误“无法实例化循环依赖!Router(”[ERROR - >]“):NgModule DynamicTestModule in ./[email protected]:-1”?但是,使用@ masterwok的方法奏效了。 – maia
我没有与上述任何方案运气。相反,我跟着文档中推荐的方法:Testing Routed Components
首先,创建任何方法您的组件调用存根路由器:
class RouterStub {
navigateByUrl(url: string) {
return url;
}
}
然后配置你的测试模块,当你执行以下操作:
TestBed.configureTestingModule({
declarations: [HeaderComponent],
providers: [
{provide: Router, useClass: RouterStub}
]
});
我想你需要像https://github.com/angular/angular/blob/951ecb4d9024b6b67a326ef2f04eb58a5190f219/modules/%40angular/router/test/integration.spec.ts#L24 –