angular - 茉莉角 4 单元测试 router.url
问题描述
我正在使用 jasmine 对 angular 4 项目中的一个函数进行单元测试,该 switch 语句如下所述:
switch(this.router.url) {
case 'firstpath': {
// some code
}
break;
case 'secondpath': {
// some more code
}
break;
default:
break;
}
在我的 spec.ts 文件中。我无法存根或更改 router.url 的值。我希望我的案例执行,但默认正在执行。我尝试了不同的方法来设置或 spyOn 和返回值,但每次 url 都是'/'。每个建议或解决方案都将受到欢迎。
解决方案
首先,您需要在测试模块中模拟路由器:
TestBed.configureTestingModule({
...
providers: [
{
provide: Router,
useValue: {
url: '/path'
} // you could use also jasmine.createSpyObj() for methods
}
]
});
您还可以更改测试中的 url 并运行您测试的方法:
const router = TestBed.inject(Router);
// @ts-ignore: force this private property value for testing.
router.url = '/path/to/anything';
// now you can run your tested method:
component.testedFunction();
正如您提到的那样spyOn
不起作用,因为它仅适用于方法/功能。而是url
一种属性。
推荐阅读
- html - CSS - 无论视口大小如何,如何保持完整图像可见?
- python - 工作好几个小时后突然出现错误:调用 Python 对象时超出最大递归深度的递归错误
- android - obj\Debug\90\MonoAndroid,Version=v9.0.AssemblyAttributes.cs 在“Sources”参数中指定了多次
- c# - 为什么“System.Net.WebException:'底层连接已关闭:发送时发生意外错误。” 出现错误?
- python - 为什么我的 python 代码认为这个字符比另一个大?
- nginx - 如何配置 NGINX 和 uwsgi 以通过一个应用程序支持多个 TLD
- kubernetes - 为什么我的 Kubernates 集群上的入口在使用 nginx-ingress-controller 的指定主机上没有响应?
- c# - 如何将变量插入到 html 字符串中,确保它没有被插入到使用 c# 的元素中
- node.js - 在节点 js 中访问谷歌云秘密管理器数据以进行数据库连接
- python - 根据像素数分屏