任何测试服之前的 Jest 数据库设置 运行

Jest database setup before any test suits are run

我正在尝试为我的整个数据库播种,以获得成功测试我的 API 所需的所有必要资源。我的测试在几个文件中。

我怎样才能做到这一点,以便在任何套件的一个测试运行之前完全播种数据库?

我试图在不使用 beforeAllafterAll 的情况下实现这一点,如 Jest 文档中所示。我想在每个测试文件之前进行整个播种。

我最终按照我最初计划使用 globalSetup 的方式解决了这个问题。

我使用 globalSetup 而不是在 beforeAll / afterAll 中处理它的原因是我希望每个 npm run test 一次 运行。我有几个 *.test.ts 文件,不想在每个文件之前播种然后删除所有资源。

我在 jest.config.ts

中设置了以下 globalSetup 字段
globalSetup: "<rootDir>/src/__tests__/setup/setup.api.ts",

setup.api.ts:

import 'tsconfig-paths/register';
import { seedTestDB } from "./setup.db"
import { setupTestUser } from "./testHelpers"
import { mongoConnect, mongoDisconnect } from "../../server/services/mongo"
import User from "../../models/User"

// // Global setup file used for tests that will complete once before ALL test suites run
const setup = async () => {
  try {
    await mongoConnect()
    // Sign in the user that will be used for Int / E2E testing
    // Also sets the user id for use in seeding logic
    await setupTestUser()

    // Seed database as needed
    // This also handles auto removing stale test resources before seeding
    await seedTestDB()

    // Grant temporary admin access to test account for unit tests to run
    await grantTempAdminAccess(process.env.__TEST_USER_ID__ as string)

    await mongoDisconnect()
  } catch(err) {
    console.log(err)
    await mongoDisconnect()
  }
}

export default setup

我连接到我的数据库,然后设置将用于对端点的所有测试请求的测试用户。我的 API 中的所有内容都在 auth 中间件之后。然后我为该数据库播种。重要的是要注意,在我为数据库播种之前,我删除了之前可能已经播种的所有资源。在开始而不是结束时这样做似乎更可靠。最后我断开了与数据库的连接。