【发布时间】:2017-09-18 05:09:58
【问题描述】:
如何在 Angular 4 单元测试中模拟 router.url?
我在组件的 ngOnint 中使用 router.url,但在我的测试中,router.url 的值是 '/'
【问题讨论】:
-
您能否提供更多详细信息,您正在尝试做什么,从描述中不太清楚您到底想做什么。
-
显示您的代码
标签: angular unit-testing
如何在 Angular 4 单元测试中模拟 router.url?
我在组件的 ngOnint 中使用 router.url,但在我的测试中,router.url 的值是 '/'
【问题讨论】:
标签: angular unit-testing
在 Angular v9 中,Router.url 是一个只读的 getter 属性。可以强制私有属性值设置url属性:
const mockUrlTree = router.parseUrl('/heroes/captain-marvel');
// @ts-ignore: force this private property value for testing.
router.currentUrlTree = mockUrlTree;
【讨论】:
你可以使用 jasmine spyObj。
在你TestBed:
providers:[
{
provide: Router,
usevalue: jasmine.createSpyObj('Router',['methodOne','methodTwo]),
},
],
在每个之前:
router = fixture.debugElement.injector.get(Router);
在测试中:
it('should...', ()=> {
(router.methodOne as Spy).and.returnValue(whateverValue)// if you wanna mock the response
});
【讨论】:
这听起来像是一个解决方案 jasmine angular 4 unit test router.url
const router = TestBed.get(Router);
router.url = '/path/to/anything';
// now you can run your tested method:
component.ngOnint();
【讨论】:
cannot assign to 'url' bacause its a constant property