【问题标题】:How to split jest e2e tests into multiple files without losing context?如何在不丢失上下文的情况下将 jest e2e 测试拆分为多个文件?
【发布时间】:2022-07-25 16:45:25
【问题描述】:

所以我已经为我的后端编写了大量的 e2e 测试,而且由于所有的测试方法都在一个文件中,这变得不堪重负。

我将所有这些都放在一个文件中的原因是,当我的应用程序被创建时,TypeORM 会创建内存数据库实例,我在该实例上执行所有测试 - 我需要跨测试运行相同的数据库,因为我正在执行交叉-实体测试。

这部分代码至关重要。它初始化应用程序(它也在后台初始化 db):

let app: INestApplication;

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

  app = moduleFixture.createNestApplication();
  await app.init();
});

有没有办法以某种方式传输beforeAll() 的上下文,以便可以从位于其他文件中的测试访问它?

也许以某种方式使app 成为全球性的?

【问题讨论】:

  • 这些天我正在尝试类似的东西,但到目前为止我只设法使用 Jest 的 globalSetupglobalTeardown 提取内存数据库初始化代码。请注意,不会以这种方式共享全局上下文,但至少我可以启动 MongoDB 并将其 URL 传递到临时本地文件中,因此可以在各个测试套件中使用它。您在分享实际应用程序上下文方面是否有更多运气?
  • 基本上我以jestjs.io/docs/27.x/mongodbgithub.com/shelfio/jest-mongodb为起点,然后构建了自己的全局setup+teardown函数。
  • 如果您使用的是 NodeJS 12+,请查看这个 Jest 跑步者:github.com/nicolo-ribaudo/jest-light-runner

标签: testing jestjs nestjs e2e-testing


【解决方案1】:

好吧,一种解决方案不是在内存数据库中创建,而是创建一个 sqlite 数据库并强制 TypeORM 使用以下命令创建一个文件(这将是您的数据库):

export const e2eConfig: SqliteConnectionOptions = {
  type: 'sqlite',
  database: 'db.db',
  entities: entities,
  synchronize: true,
};

sqlite 大部分与mysql 兼容(我正在使用)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多