如何在JEST中的自定义茉莉花记者中重试测试

时间:2019-07-19 21:27:25

标签: jestjs

我正在使用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都掉了。另外,从另一方面来说,我需要通过某种计数器来跟踪重试多少时间。

那么,有没有人可以让我了解如何实现重试功能?

谢谢!

0 个答案:

没有答案