错误:超时 - 异步函数未在未定义毫秒内完成

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

我最近升级了 Angular 8 应用程序以使用较新版本的 Karma 和相关软件包(从“karma”:“~4.0.0”升级到“karma”:“~4.4.1”)。许多之前工作正常的单元测试在升级后开始间歇性失败,并出现以下错误。失败主要发生在具有多个描述块的规范文件中,这些描述块使用正在测试的组件的相同实例。我更改了代码,以便实例不会在描述套件之间共享,并在 beforeEach 函数中添加了 jasmine.DEFAULT_TIMEOUT_INTERVAL 的设置。这些变化大大减少了失败。但是,Jenkins 管道中的一两个测试仍可能间歇性失败。在本地运行不会导致超时。错误和样本测试如下。正如您所看到的,在测试中设置了 jasmine.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();
    });
});
jasmine karma-jasmine karma-runner karma-chrome-launcher
2个回答
0
投票

你需要调用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();
});

0
投票

您的

await
中似乎缺少
beforeEach
来等待
TestBed
在执行测试之前成功编译:

await TestBed.configureTestingModule({
    imports: [MyTestModule]
}).compileComponents();
© www.soinside.com 2019 - 2024. All rights reserved.