任何测试服之前的 Jest 数据库设置 运行
Jest database setup before any test suits are run
我正在尝试为我的整个数据库播种,以获得成功测试我的 API 所需的所有必要资源。我的测试在几个文件中。
我怎样才能做到这一点,以便在任何套件的一个测试运行之前完全播种数据库?
我试图在不使用 beforeAll
和 afterAll
的情况下实现这一点,如 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 中间件之后。然后我为该数据库播种。重要的是要注意,在我为数据库播种之前,我删除了之前可能已经播种的所有资源。在开始而不是结束时这样做似乎更可靠。最后我断开了与数据库的连接。
我正在尝试为我的整个数据库播种,以获得成功测试我的 API 所需的所有必要资源。我的测试在几个文件中。
我怎样才能做到这一点,以便在任何套件的一个测试运行之前完全播种数据库?
我试图在不使用 beforeAll
和 afterAll
的情况下实现这一点,如 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 中间件之后。然后我为该数据库播种。重要的是要注意,在我为数据库播种之前,我删除了之前可能已经播种的所有资源。在开始而不是结束时这样做似乎更可靠。最后我断开了与数据库的连接。