【问题标题】:How to mock the router.navigate method in jest如何开玩笑地模拟 router.navigate 方法
【发布时间】:2021-06-26 13:50:02
【问题描述】:

我是在 Angular 中使用 Jest 进行单元测试的初学者。在我的组件中,我有 this.router.navigate() 方法。早些时候我使用 Jasmine 来测试它。为此,我做了以下工作:

import { Router } from '@angular/router';

那么,

let router:Router;

那么,在beforeEach

router = TestBed.get(Router);

然后,在测试用例中,

it('should show news intially ', () => {
   const navigateSpy = spyOn(router,'navigate');
   component.showNews();
   expect(navigateSpy).toHaveBeenCalledWith(['/news']);
 });

此测试已通过。但是我如何使用 Jest 做同样的事情呢?请帮忙。

我有一个ngOnInit() 方法,它调用另一个方法getDynamicMenus()。下面是ngOnInit() 方法:

 ngOnInit() {
    this.getDynamicMenus();
  }


  getDynamicMenus() {
    this.menuService.getAllMenus().subscribe(menus => {
      this.menus = menus._embedded.menu;
    });
  }

请告诉我如何模拟此方法。在茉莉花中,我嘲笑getDynamicMenus() 并调用component.ngOnInit()。但这在 Jest 中不起作用。请帮忙。

【问题讨论】:

  • jest.spyOn(router, 'navigate').mockReturnValue(null); 然后expect(router.navigate).toHaveBeenCalledWith(['/news']);

标签: angular typescript unit-testing jestjs jasmine


【解决方案1】:

jasmine spyOn() 函数的等价物是jest.spyOn(object, methodName)

it('should show news intially ', () => {
   const navigateSpy = jest.spyOn(router,'navigate');
   component.showNews();
   expect(navigateSpy).toHaveBeenCalledWith(['/news']);
});

【讨论】:

    猜你喜欢
    • 2019-07-09
    • 1970-01-01
    • 2019-03-23
    • 2018-10-29
    • 2020-11-18
    • 1970-01-01
    • 1970-01-01
    • 2017-07-01
    相关资源
    最近更新 更多