在我的角度单元测试中执行取消的操作错误

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

我正在研究 Angular 16 项目,它的茉莉花业力测试本质上是不稳定的,有时它们会通过,但有时它们会失败。错误日志是 -

Error: executing a cancelled action
at AsyncAction.execute (node_modules/rxjs/dist/esm/internal/scheduler/AsyncAction.js:41:20)
at AsyncScheduler.apply (node_modules/rxjs/dist/esm/internal/scheduler/AsyncScheduler.js:17:33)
at apply (node_modules/zone.js/fesm2015/zone.js:2367:41)
at _ZoneDelegate.invokeTask (node_modules/zone.js/fesm2015/zone.js:402:31)
at ProxyZoneSpec.onInvokeTask (node_modules/zone.js/fesm2015/zone-testing.js:304:39)
at _ZoneDelegate.invokeTask (node_modules/zone.js/fesm2015/zone.js:401:60)
at Zone.runTask (node_modules/zone.js/fesm2015/zone.js:173:47)
at apply (node_modules/zone.js/fesm2015/zone.js:472:48)
at data.args.<computed> (node_modules/zone.js/fesm2015/zone.js:2347:32)

版本使用- 角度:16.2.8 rxjs:7.8.1 区域.js:0.13.3

当组件被销毁时,我使用 takeUntil 运算符来取消订阅我的可观察量,并在我的可观察量清理测试中添加 afterEach -

afterEach(() => {
    component['destroyed$'].next();
    component['destroyed$'].complete();
});

但此后测试的不稳定性质也没有解决。

虽然这个错误出现在许多组件上,但下面是我最近遇到此错误的组件 -

请指导我如何解决这个问题。我是角度新手

javascript angular rxjs observable karma-jasmine
1个回答
0
投票

zone.js升级到Angular 16的兼容版本0.13.4+,并使用fakeAsync和flush包装异步测试,以控制时序并防止竞争条件。另外,每次使用destroyed$.next()和destroyed$.complete()后进行清理

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