我正在使用Jest作为UI测试的测试运行器。我知道,从本质上讲,这些测试往往是片状的。我确定了一些案件,当我看到这些案件时,我抛出了一个特定的例外。例如:我的SSO登录页面失败。现在,我想重试由于不良原因而失败的测试用例。但是,Jest并没有提供这种功能。
要尝试实现重试功能,我很难使用afterEach挂钩。但是,不幸的是,您没有从先前的测试运行中获得任何信息。因此,我选择了一位定制记者。
class RetryReporter implements jasmine.CustomReporter {
private asyncFlow: Promise<any> | null | undefined;
private counter: any = {};
// Some callback are not shown here for simplicity
jasmineStarted(suiteInfo: any): void {
beforeEach(async () => {
await this.asyncFlow;
this.asyncFlow = null;
});
}
specDone(spec: any): void{
this.asyncFlow = this.retry(spec);
}
async retry(result: any) {
// Choose if you want to retry depending on the result params
try{
const projectRootPath: string = '<rootPath>';
const jestConfig: ProjectConfig = {
...defaults,
projects: [projectRootPath],
roots: ['/tests'],
rootDir: '/tests',
testMatch: ['**/?(whatever.)+(spec|test).[tj]s?(x)' ],
testNamePattern: 'What i want to retry',
setupFilesAfterEnv: ['path/to/myCustomReporter.js']
};
await runCLI(jestConfig as any, [projectRootPath]);
}catch(e){
console.log(e);
}
}
}
这有点工作,如果我不指定setupFilesAfterEnv的话,我可以运行异步代码,然后重试测试。但是,如果我不指定setupFilesAfterEnv,它将第二次重试,它将停止。因为它没有自定义报告程序。
但是我想重试X次。所以现在,如果我把setupFilesAfterEnV。它冻结了,我可以看到内存和CPU都掉了。另外,从另一方面来说,我需要通过某种计数器来跟踪重试多少时间。
那么,有没有人可以让我了解如何实现重试功能?
谢谢!