在Angular 2.0.0中,我正在对使用Router的组件进行单元测试。但是,我收到了“提供的参数与调用目标的任何签名都不匹配。”错误。在spec.ts中的Visual studio代码中,红色突出显示的是新的Router()
正确的语法是什么?
我的代码如下:
spec.ts
import { TestBed, async } from '@angular/core/testing';
import { NavToolComponent } from './nav-tool.component';
import { ComponentComm } from '../../shared/component-comm.service';
import { Router } from '@angular/router';
describe('Component: NavTool', () => {
it('should create an instance', () => {
let component = new NavToolComponent( new ComponentComm(), new Router());
expect(component).toBeTruthy();
});
});
组件构造器
constructor(private componentComm: ComponentComm, private router: Router) {}
4条答案
按热度按时间nwlls2ji1#
您也可以只使用RouterTestingModule和
spyOn
navigate
函数,如下所示jw5wzhpr2#
这是因为
Route
有一些依赖项,它希望传递给它的构造函数。如果你正在使用Angular组件,你不应该尝试做孤立的测试。你应该使用Angular测试基础设施来准备测试环境。这意味着让Angular创建组件,让它 * 注入 * 所有需要的依赖项,而不是你尝试创建所有的东西。
为了让您开始,您应该有这样的内容
或者类似的东西。你使用
TestBed
从头开始配置一个模块来进行测试。你配置它的方式和@NgModule
几乎一样。这里我们只是在模拟路由器。因为我们只是在进行单元测试,所以我们可能不需要真实的的路由工具。我们只是想确保它是用正确的参数调用的。模拟和spy将能够为我们捕获那个调用。
如果你想使用真实的的路由器,那么你需要使用
RouterTestingModule
,在那里你可以配置路由。另请参阅:
unhi4e5o3#
下面是我们在组件控制器中注入Route服务的示例:
我们还可以测试其他函数,如
navigate()
。以防万一:包含所有模拟组件的文件(mock.components.specs.ts)
j0pj023g4#
贾斯敏更适合做间谍...