我正在研究 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();
});
但此后测试的不稳定性质也没有解决。
虽然这个错误出现在许多组件上,但下面是我最近遇到此错误的组件 -
请指导我如何解决这个问题。我是角度新手
将zone.js升级到Angular 16的兼容版本0.13.4+,并使用fakeAsync和flush包装异步测试,以控制时序并防止竞争条件。另外,每次使用destroyed$.next()和destroyed$.complete()后进行清理