带有传播运算符的 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 之前有效。
我有一个 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 之前有效。