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



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

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

mockRouter = jasmine.createSpyObj<Router>("router", ["navigate", "navigateByUrl"]);

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

茉莉花监视财产应该是合理的解决方案

spyOnProperty(router, 'url', 'get').and.returnValue('/users');

按照此处的建议 https://stackoverflow.com/a/43793575/11552394

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

这是对我有用的:

describe('Yourserviceorcomponent', () => {
...
let router: Router;
...
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
{
provide: Router,
useValue: {
url: '/page1',
events: of(new NavigationEnd(0, '/page1', '/')),
navigate: jasmine.createSpy('navigate'),
},
},
],
imports: [RouterTestingModule],
}).compileComponents();
router = TestBed.inject(Router);
MockRender();
});
...
});

最新更新