如何模拟Router.navigateByUrl(...)。然后在角向中使用Karma和Jasmine进行

问题描述 投票:0回答:2

我的问题很简单,我以这种方式使用navigationByUrl()然后then():

this.router
.navigateByUrl(PAGE1, {
  skipLocationChange: true
})
.then(() => {
  this.router.navigate([PAGE2]);
});

和我模拟导航,navigingByUrl,然后这样:

const mockRouter = {
  navigate: () => {},
  navigateByUrl(url: string) { return url; },
  then: () => {}
};

它对于Navigation和NavigationByUrl效果很好,但当时不起作用,我也不知道如何模拟此功能。

有人可以帮我吗?

angular mocking karma-jasmine
2个回答
0
投票

首先,您必须注入路由器,然后必须使用spyOn方法监视路由器方法调用。希望我在此消息下方的示例对您有所帮助。让我知道是否需要更多帮助。

describe('#displayForm', () => {
    it('should call Router.navigateByUrl with the ID of the form', inject([Router], (router: Router) => {
        const spy = spyOn(router, 'navigateByUrl');

        const url = spy.calls.first().args[0];

        expect(url).toBe('YOUR_PAGE');
    }));
});

0
投票

感谢jonrsharpe提醒我找到了解决方案。解决的办法是通过这种方式来模拟NavigationByUrl:

navigateByUrl: () => {
    return {
      then: () => {}
    }
  }
© www.soinside.com 2019 - 2024. All rights reserved.