编写多个测试用例时,ActivatedRoute参数在单元测试中不起作用

时间:2019-10-21 09:13:07

标签: angular testing

我正在使用以下代码来模拟ActivatedRoute的params值:

 providers: [
    {
      provide: ActivatedRoute,
      useValue: { params: of({id: 1})}
    },

我的组件按如下方式使用ActivateRoute:

ngOnInit() {
this.route.params.subscribe(params => {
  this.selectedId = +params['id'];

我的测试案例目前为空。 第一个成功,第二个失败。

describe('The VIS form', () => {
  it('should be invalid', () => {
   //Nothing here
  });

  it('should be valid', () => {
   //Nothing here
  });
});

仅在应该为有效测试用例的情况下,才给我以下错误。应该无效的测试用例可以按预期工作:

TypeError: Cannot read property 'subscribe' of undefined
at SafeSubscriber.route.params.subscribe.

我尝试使用存根(stub),将主题作为Params的来源来模拟ActivatedRoute。

我希望两个测试都能通过,因为它们都是空的,什么也不做。

See image for the test results

1 个答案:

答案 0 :(得分:0)

我不确定useValue为什么不起作用,但是我通常使用一个类来做到这一点:

  class MockActivatedRoute {
    params = of({
        id: '1'
    });
  }
providers: [
    {
      provide: ActivatedRoute,
      useClass: MockActivatedRoute
    },

有什么区别吗?