【问题标题】:Jest beforeAll() and afterAll() from different test are running one after the other来自不同测试的 Jest beforeAll() 和 afterAll() 一个接一个地运行
【发布时间】:2021-09-24 18:55:32
【问题描述】:

我正在尝试在每个测试套件之后使用 beforeAll 和 afterAll 方法来设置和拆卸数据库。然而,所有 beforeAll 函数一个接一个地运行。根据(文档)[https://jestjs.io/docs/api#beforealllfn-timeout] 的预期行为是 describe 内的 beforeAll 和 afterAll 应该只在 describe 块的开头运行。

这是我的代码示例。

test-file-1.ts

describe("POST endpoint", () => {
  beforeAll(async () => {
    console.log("✨ Seeding DB for createBooking tests...");

    const createProperty = await prisma.property.create({});

    console.log("✨ DB seeded for createBooking test!");
  });

  afterAll(async () => {
    await clearDB();

    await prisma.$disconnect();

    console.log("✨ DB successfully cleared!");
  });
});

test-file-2.ts

describe("PUT endpoint", () => {
  beforeAll(async () => {
    console.log("✨ Seeding DB for updateBooking tests...");

    const createProperty = await prisma.property.create({});

    console.log("✨ DB seeded for updateBooking test!");
  });

  afterAll(async () => {
    await clearDB();

    await prisma.$disconnect();

    console.log("✨ DB successfully cleared!");
  });
});

当我运行这些测试时,控制台会记录以下内容,这表明每个测试文件中的 beforeAll 函数正在彼此同步运行。

    ✨ Seeding DB for createBooking tests...

    ✨ Seeding DB for updateBooking tests...

    ✨ DB seeded for createBooking test!

    ✨ DB seeded for updateBooking test!

然后测试套件运行。为什么 beforeAll 和 afterAll 函数不在describe 块中的各自上下文范围内?我是不是做错了什么?

【问题讨论】:

    标签: jestjs


    【解决方案1】:

    Jest 测试是并行运行的,而不是按顺序运行的。因此,两个测试都在不等待另一个结束的情况下开始。我只能在他们的文档here

    注意:--runInBand cli 选项确保 Jest 在同一进程中运行测试,而不是为单个测试生成进程。通常,Jest 会跨进程并行测试运行,但很难同时调试多个进程。

    【讨论】:

      猜你喜欢
      • 2022-12-09
      • 2014-03-10
      • 1970-01-01
      • 2017-11-10
      • 1970-01-01
      • 2014-01-26
      • 2012-03-28
      • 1970-01-01
      • 2020-06-02
      相关资源
      最近更新 更多