【发布时间】:2021-06-18 02:17:12
【问题描述】:
我对使用响应式表单的组件进行了一些单元测试。
在测试中,我将修补表单上的值,然后单元测试将测试我对各种表单valueChanges 订阅的期望。
为了让测试等待valueChanges 执行,我总是在patch 之后使用以下内容:
fixture.detectChanges();
await fixture.whenStable();
这总是很好。
在我升级(从 v8 到 v12)之后,当我拥有 await fixture.whenStable() 时,所有测试都会超时。
我明白了:
Error: Timeout - Async function did not complete within 5000ms (set by jasmine.DEFAULT_TIMEOUT_INTERVAL)
error properties: Object({ originalStack: 'Error: Timeout - Async function did not complete within 5000ms (set by jasmine.DEFAULT_TIMEOUT_INTERVAL)
at new ZoneAwareError (http://localhost:9877/_karma_webpack_/webpack:/node_modules/zone.js/fesm2015/zone-error.js:92:33)
当然,如果我删除 await fixture.whenStable();,测试将不再有效,因为当我尝试访问属性集时,valueChanges 的形式未设置。
为什么await fixture.whenStable() 现在似乎挂了?
【问题讨论】:
-
您是否尝试过使用
waitForAsync或fakeAsync和tick?我怀疑他们能否解决您的问题,但也许值得一试。 -
感谢您的建议。我尝试了每种组合,但它只是不等待或在没有 await fixture.whenStable() 的情况下触发 valueChanges。
标签: angular karma-jasmine