Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 如何在不使用测试床的情况下模拟角度中的ActivatedRoute_Angular_Unit Testing_Testing_Angular Activatedroute - Fatal编程技术网

Angular 如何在不使用测试床的情况下模拟角度中的ActivatedRoute

Angular 如何在不使用测试床的情况下模拟角度中的ActivatedRoute,angular,unit-testing,testing,angular-activatedroute,Angular,Unit Testing,Testing,Angular Activatedroute,问题很简单。我从来没有真正喜欢过Angular中最初的测试(TestBed部分)的工作方式,所以我总是用经典的方式:用ts mockito进行模拟。无试验台,无需配置,零混乱。我甚至用玩笑代替因果报应/茉莉花 但是,当涉及到模仿ActivatedRouter时,我总是遇到麻烦,我想你们中的很多人都是这样。我看到的一个解决方案是,让一个对象具有ActivatedRouter所具有的大量属性,然后替换要模拟的属性的值。这一解决方案相当令人讨厌,而且相当不可持续 另一个解决方案是强制使用测试床,我并不

问题很简单。我从来没有真正喜欢过Angular中最初的测试(TestBed部分)的工作方式,所以我总是用经典的方式:用ts mockito进行模拟。无
试验台
,无需配置,零混乱。我甚至用玩笑代替因果报应/茉莉花

但是,当涉及到模仿
ActivatedRouter
时,我总是遇到麻烦,我想你们中的很多人都是这样。我看到的一个解决方案是,让一个对象具有
ActivatedRouter
所具有的大量属性,然后替换要模拟的属性的值。这一解决方案相当令人讨厌,而且相当不可持续

另一个解决方案是强制使用
测试床
,我并不喜欢,并执行以下操作:

提供者:[
{
提供:激活的路由,
使用价值:{
快照:{
参数图:{
获取:()=>“foo”
},
查询参数映射:{
获取:()=>“条”
}
}
}
}
]

这一个实际上相当不错,但正如我所说的,它迫使您使用
测试床。那么,如果不使用
TestBed
,如何模拟
ActivatedRoute
行为呢?

因此,今天我想出了一种方法,可以很好地模拟它,而不必使用
TestBed

这是一个完整测试如何使用ts mockito的小例子:

函数设置(){
常数路由=模拟(激活的路由);
const routeInstance=实例(路由);
Object.defineProperty(路由实例,“快照”{
可写:对,
对,,
价值:{
参数图:{
获取:()=>“someParam”
},
查询参数映射:{
获取:()=>“someQueryParam”
}
}
});
返回{
sut:新的MyComponent(路由实例),
路线
};
}
描述('MyComponent',()=>{
它('should get param and query param from activated route',async()=>{
const{sut,route}=setup();
const actualParam=sut.getParam();
expect(actualParam).toBe('someParam');
const actualQueryParam=sut.getQueryParam();
expect(actualQueryParam).toBe('someQueryParam');
});
});

感谢您发布答案。我一直在努力模仿paramMap属性,失败了很多次,直到你的帖子给了我所需要的洞察力。