Angular 单元测试 - 如何模拟 router.url

use*_*395 3 unit-testing jasmine angular6

我有一个 Angular 6 应用程序,我正在尝试对注入路由器的组件进行单元测试。在我的 ngOnInit 方法中,我引用了 this.router.url 并使用它。

所以现在我正在尝试编写一个 jasmine 单元测试,但我无法设置 router.url 属性,因为它“是一个常量或只读属性”。我目前正在这样嘲笑路由器。

mockRouter = jasmine.createSpyObj<Router>("router", ["navigate", "navigateByUrl"]);
Run Code Online (Sandbox Code Playgroud)

我还需要设置什么才能在测试中正确模拟 url 值?

小智 9

茉莉花窥探财产应该是合理的解决方案

spyOnProperty(router, 'url', 'get').and.returnValue('/users');
Run Code Online (Sandbox Code Playgroud)

正如这里推荐的 /sf/answers/3065550281/

并记录在 Jasmine 文档中 https://jasmine.github.io/api/3.4/global.html#spyOnProperty

  • 我收到 url 属性不存在错误。注意: url 是一个只读属性,它对spyOnProperty() 行为有什么影响吗? (4认同)