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

rxjs zip with spread operator fails only in karma test

我有一个 Angular 应用程序,其代码如下:

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

其中 loadingTasks 的类型为 Observable<boolean>[]。 运行 运行应用程序时一切正常,但是当我执行我的 karma/jasmine 测试时,看起来像这样:

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

这是怎么回事? karma 使用的 TypeScript 或 rxjs 版本是否与我 运行 使用 ng serve 的应用程序时使用的版本不同?我还应该提到,在我将我的应用程序从 Angular 6 升级到 Angular 8.

之前,此测试已成功 运行ning

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