你如何在Angular 2/4/5的单元测试中模拟Router Params? [关闭]

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

我有一个我想要测试的方法,如下所示:

init(): void {
    this.route.params.subscribe(params => {
        if (params['companyId']) {
            this.companyId = params['companyId'];
        } else {
            this.companyId = this.user.companyId;
        }
    });
}

AKA,如果路由器params有companyId,请使用它。如果没有,请使用与用户关联的companyId。嘲笑用户很容易。但是,我不确定如何模拟params。

你怎么做到这一点?

angular unit-testing jasmine angular5
1个回答
0
投票

你可以使用RouterTestingModule

或者,如果您的组件很简单,请提供一个更简单的模拟,如下所示:

const mockRouter = {
  params: new Subject<any>();
}
// add it to TestBed module in `providers` array:
{ provide: Router, useValue: mockRouter }

// use it in unit tests:
it ('should mock route params', async(() => {
    const router = TestBed.get(Router);
    router.parms.next({ companyId: '123' });
    ...
    fixture.detectChanges();
    expect(componentInstance.companyId).toEqual('123');
}));
© www.soinside.com 2019 - 2024. All rights reserved.