带传播运算符的rxjs zip仅在业力测试中失败

时间:2020-02-21 12:01:11

标签: angular typescript rxjs observable karma-jasmine

我有一个带有以下代码的Angular应用程序:

zip(...this.loadingTasks).subscribe((result: boolean[]) => {
  this.shouldShowContent = result.every((isLoading: boolean) => {
    return !isLoading;
  });
});

其中loadingTasks的类型为Observable<boolean>[]。在运行应用程序时,一切正常,但是当我执行如下所示的业力/茉莉花测试时:

const obs1 = of(false);
const obs2 = of(false);
component.loadingTasks = [obs1, obs2];
// ...

expect(component.shouldShowContent).toBe(true);

我收到以下错误:

TypeError: Object(...) is not iterable (cannot read property Symbol(Symbol.iterator))

这是怎么回事?业力使用的TypeScript或rxjs版本是否与使用ng serve运行应用程序时使用的版本不同?我还应该提到,在我将应用程序从Angular 6升级到Angular 8之前,该测试已成功运行。

1 个答案:

答案 0 :(得分:0)

问题是我没有用空数组初始化loadingTasks并且我的代码在ngOnInit内部,所以它是在我的测试代码更改数组的值之前执行的,所以运算子正在undefined上进行迭代。不过,我仍然不知道为什么它在升级Angular之前会起作用。