如何使用一个应用程序实例进行所有 e2e 测试?

use*_*794 5 typescript jestjs nestjs

我正在一个 Nestjs 项目中工作,该项目被组织成单独的模块。每个模块都有自己的 e2e 测试。在每个测试中,都会在方法中创建应用程序的实例beforeAll()。像这样

const moduleFixture: TestingModule = await Test.createTestingModule({
      imports: [
        AppModule,
      ],
    }).compile();

    app = moduleFixture.createNestApplication();
    await app.init();
Run Code Online (Sandbox Code Playgroud)

测试结束时,app.close()称为拆除应用程序。

有没有办法可以在所有测试中使用同一个应用程序,然后在最后关闭该应用程序?为每个测试创建和拆除整个应用程序会使 e2e 测试花费很长时间。我还遇到了异步超时错误。

gli*_*a93 3

经过多次尝试,我发现这是不可能的,因为:

每个测试都在自己的环境中运行

让我详细说明一下:

1. 您无法在globalSetup中设置应用程序实例,因为:

注意:任何通过globalSetup定义的全局变量只能在globalTeardown中读取。您无法检索测试套件中此处定义的全局变量。

这意味着您不能global.app在测试用例中使用一个变量。如果你不能共享global.app变量,那么你就不能使用request(app.getHttpServer()),这对于 e2e 测试至关重要。

setupFiles2. 您可以在或中设置应用程序实例setupFilesAfterEnv,但这些文件将在每个测试用例中运行。这显然是违背本意的

每个 setupFile 将在每个测试文件中运行一次。由于每个测试都在其自己的环境中运行,因此这些脚本将在执行 setupFilesAfterEnv 之前和测试代码本身之前在测试环境中执行。

该文档没有说setupFileAfterEnv将按测试文件运行。所以我尝试了,但不幸的是,它按测试文件运行。