2

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

1 回答 1

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();
});
于 2021-07-12T16:19:04.067 回答