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

时间:2018-01-03 22:51:39

标签: angular unit-testing jasmine angular5

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

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

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

你是怎么做到的?

1 个答案:

答案 0 :(得分: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');
}));