Angular 7 Jest单元测试中的模拟路由器和Ngzone

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

我在组件类中使用了ngzone和router。我的单元测试工作正常,但是现在出现错误,无法读取到undefined的LowerCase()。谁能建议我如何同时模拟Ngzone和Router。

jestjs angular7 ngzone
1个回答
0
投票

我为此使用TestBed :)

只需使用组件和路由配置测试模块,然后从测试模块获取Router实例,然后监视Router.navigate以使用自定义的模拟实现。


import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { Router } from '@angular/router';
import { RouterTestingModule } from '@angular/router/testing';

let component: YourComponent;
let fixture: ComponentFixture<YourComponent>;
let router: Router;

beforeEach(async(() => {
  TestBed.configureTestingModule({
    imports: [
      RouterTestingModule.withRoutes([
        { path: "", component: YourComponent },
        { path: "**", redirectTo: "" },
      ]),
    ],
    declarations: [YourComponent],
    providers: [],
  }).compileComponents();
}));

beforeEach(() => {
    fixture = TestBed.createComponent(YourComponent);
    component = fixture.componentInstance;
    router = TestBed.inject(Router);
    jest
      .spyOn(router, 'navigate')
      .mockImplementation(() => of(true).toPromise());
  });
© www.soinside.com 2019 - 2024. All rights reserved.