嘲笑forkJoin的Angular单元测试

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

我在Angular 9中使用Jest & Spectator工作,并试图为一个组件编写单元测试.问题是,在我的ngOnInit()中,我有一个forkJoin对我的门面进行一些调用,然后在订阅中,将返回的值分配给正确的变量。

当我的测试运行时,我得到这个错误。

TypeError: You provided 'undefined' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.

      81 |       myData1: this.facade1.findThisThing(),
      82 |       myData2: this.facade2.findThatThing(),
    > 83 |     }).subscribe(data => {
         |        ^
      84 |       this.data1 = data.myData1.values;
      85 |       this.data2 = data.myData2.values;

我如何模拟这个订阅处理?

组件。


ngOnInit(): void {
    forkJoin({
      myData1: this.facade1.findThisThing(),
      myData2: this.facade2.findThatThing(),

    }).subscribe(data => {
      this.data1 = data.myData1.values;
      this.data2 = data.myData2.values;
    });
}

我想也许可以在通过createComponentFactory方法创建组件时,把它放在component.spec中的provider数组中,但这似乎没有帮助。

如果有任何帮助,我将非常感激。

const createComponent = createComponentFactory<ComponentUnderTest>(
    {
      component: ComponentUnderTest,
      mocks: [
       ...
      ]
      providers: [
        {
          provide: 'subscribe',
          useValue: jest.fn()
        }
      ],
      shallow: true,
    },
  );

任何帮助都将是非常感激的。

非常感谢Stack Overflow社区

angular unit-testing rxjs fork-join
1个回答
0
投票

阅读关于在forkjoin.something里面监视和模拟你的两个方法的内容。

spyOn(this.facade1.findThisThing).and.returnValue(of())。

secondMethod也一样。


0
投票

其实问题不在于subscribe语句本身,你要做的是嘲讽服务,从而嘲讽返回值。你要做的是嘲讽服务,从而嘲讽你在forkJoin里面使用的函数的返回值。请注意,rxjs是尽可能同步的,所以如果你想返回一个用 of 操作符,它是完全同步的。所以你可以对函数进行模拟,并返回一个利用 of 操作符。

你所面临的问题实际上是发生了,因为你传递给 forkJoin 的一个函数正在返回 undefined. 如果你利用jasmine spy来嘲笑Angular服务,请注意,如果你没有指定一个函数的返回值,你正在监视的函数,它将返回未定义。

© www.soinside.com 2019 - 2024. All rights reserved.