angular - Angular,使用路由器导航时测试哪个组件是实例化的
问题描述
我想知道在导航到路线时是否有办法测试哪个组件被实例化。
我有这条路线:
const routes: Routes = [{path: ':anyString', component: AnyStringComponent}];
我想用 unit-test 进行测试:
router.navigate(['azdfz4896']);
// expect instantiated component to be AnyStringComponent
有没有办法测试它?
解决方案
您可以模拟ActivatedRoute并尝试:
route.snapshot._routeConfig.component.name
激活路由模拟:
export class MockActivatedRoute implements ActivatedRoute{
component : Type<any>|string;
snapshot : ActivatedRouteSnapshot;
url : Observable<UrlSegment[]>;
params : Observable<Params>;
queryParams : Observable<Params>;
data : Observable<Data>;
outlet : string;
...
}
...
你的测试
router = TestBed.get(Router);
location = TestBed.get(Location);
router.initialNavigation();
....
it('navigate to "search" takes you to /search', fakeAsync(() => {
route = new MockActivatedRoute();
router.navigate(['azdfz4896']);
tick();
expect(location.path()).toBe('/azdfz4896');
expect(route.snapshot.component.name).toBe('AnyStringComponent');
}));
希望对你有帮助
推荐阅读
- moodle - 如何从课程中的 Moodle 作业中获取所有文件?
- windows - 使用 AutoHotkey 知道是否有任何手指在触摸(精密)触摸板
- azure-functions - 通过 ARM 在停止状态下部署 Azure 函数
- node.js - 无法使用 Graph API 在混合环境中的本地对象上创建事件
- python - Understanding Gym Environment
- typescript - 如何正确指定类对象的类型
- python - 关于 Pyomo 提供的数学函数的问题
- spring - Spring 批处理列表(如果用于处理器、分类器和编写器)
- neo4j - Neo4j 时间树查询
- mysql - 我应该对 MySql InnoDB 表执行表优化吗?