【问题标题】:Angular 4 - router.url unit testingAngular 4 - router.url 单元测试
【发布时间】:2017-09-18 05:09:58
【问题描述】:

如何在 Angular 4 单元测试中模拟 router.url?

我在组件的 ngOnint 中使用 router.url,但在我的测试中,router.url 的值是 '/'

【问题讨论】:

  • 您能否提供更多详细信息,您正在尝试做什么,从描述中不太清楚您到底想做什么。
  • 显示您的代码

标签: angular unit-testing


【解决方案1】:

在 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;

【讨论】:

  • 这是唯一对我有用的解决方案,当 RouterTestingModule 和 router.url 都用于单元测试时
  • 如果您使用的是更高版本的 Angular,则此答案需要更多支持,然后其他答案将不起作用。
【解决方案2】:

你可以使用 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
});

【讨论】:

  • 如果需要进一步解释,请告诉我:)
【解决方案3】:

这听起来像是一个解决方案 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
猜你喜欢
  • 2019-04-18
  • 2018-11-24
  • 1970-01-01
  • 2018-04-16
  • 2017-11-18
  • 2018-05-21
  • 1970-01-01
  • 2018-01-01
  • 2018-06-13
相关资源
最近更新 更多