错误:超时-异步函数未在undefinedms内完成



我最近升级了Angular 8应用程序,以使用Karma和相关软件包的新版本(从"Karma":"~4.0"升级到"Karma":"~4.4.1"(。许多以前运行良好的单元测试在升级后开始间歇性失败,出现以下错误。失败主要发生在规范文件中,该文件有多个描述块,这些块使用了正在测试的组件的同一实例。我修改了代码,这样实例就不会在描述套件中共享,并为jasmine添加了设置。beforeEach函数中的DEFAULT_TIMEOUT_INTERVAL。这些变化大大减少了故障。然而,在Jenkins管道中,一到两次测试可能仍会间歇性失败。在本地运行不会导致超时。下面是错误和样本测试。正如你所看到的茉莉花的价值。DEFAULT_TIMEOUT_INTERVAL在测试中设置,但错误仍然报告undefinedms

升级包

"karma": "~4.4.1",
"karma-chrome-launcher": "~3.1.0",
"karma-coverage-istanbul-reporter": "~2.1.1",
"karma-jasmine": "~3.1.1",
"karma-jasmine-html-reporter": "^1.5.2",

运行测试

ng "test" "test-lib" "--browsers=ChromeHeadlessNoSandbox"

错误:

Error: Timeout - Async function did not complete within undefinedms (set by jasmine.DEFAULT_TIMEOUT_INTERVAL) at <Jasmine>

样品测试:

import { async, TestBed } from '@angular/core/testing';
import { MyTestModule } from './my-test.module';
describe('MyTestModule', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [MyTestModule]
}).compileComponents();
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
}));
it('should create', () => {
expect(MyTestModule).toBeDefined();
});
});

您需要调用done((;功能毕竟是期望;类似:

it('getHeroes should return value from array', (done: DoneFn) =>{
let heroes: Hero[] = [
{ id: 11, name: 'Dr Nice' },
{ id: 12, name: 'Narco' },
{ id: 13, name: 'Bombasto' },
{ id: 14, name: 'Celeritas' },
{ id: 15, name: 'Magneta' },
{ id: 16, name: 'RubberMan' },
{ id: 17, name: 'Dynama' },
{ id: 18, name: 'Dr IQ' },
{ id: 19, name: 'Magma' },
{ id: 20, name: 'Tornado' }
];
expect(service.getHeroes()).toEqual(heroes);
done();
});

最新更新