【发布时间】:2020-03-05 14:10:03
【问题描述】:
我最近升级了一个 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