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

标签 angular testing

我正在使用以下代码模拟 ActivatedRoute 的参数值:

 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
  });
});

它仅在 should be valid 测试用例中给我以下错误。应该无效的测试用例按预期工作:

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

我试过使用 stub 模拟 ActivatedRoute,使用主题作为参数的来源。

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

See image for the test results

最佳答案

我不确定为什么 useValue 不起作用,但我通常使用一个类来执行此操作:

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

这有什么区别吗?

关于angular - 编写多个测试用例时,ActivatedRoute 参数在单元测试中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58483161/

相关文章:

testing - 使用构建服务器时如何在本地测试代码?

javascript - 我应该测试模块是否具有某些属性吗?

javascript - 使用 ControllerAs 和 Ng-Show 测试数据指令

testing - ReferenceError : Can't find variable: require. [ karma ,webpack]

Angular 过滤器唯一的对象数组

angular - Ionic 4 从另一个模态 : modal. create() 中打开模态不是函数

Angular 4日历 Material

unit-testing - uC/OS 的单元测试 - II

不允许 Angular2 多个构造函数实现 TS2392

javascript - 在间隔上显示和隐藏 Angular Material 工具栏?