Hooks
Hooks 允许你在测试或测试套件执行之前或之后运行初始化和清理逻辑。
beforeAll
- 类型:
(fn: (ctx: SuiteContext) => void | Promise<void>, timeout?: number) => void
在当前套件的所有测试之前运行。
import { beforeAll } from '@rstest/core';
beforeAll(async (ctx) => {
// 在所有测试前的初始化逻辑
// ctx.filepath 表示当前测试文件路径
});
afterAll
- 类型:
(fn: (ctx: SuiteContext) => void | Promise<void>, timeout?: number) => void
在当前套件的所有测试之后运行。
import { afterAll } from '@rstest/core';
afterAll(async (ctx) => {
// 在所有测试后的清理逻辑
});
beforeEach
- 类型:
(fn: () => void | Promise<void>, timeout?: number) => void
在当前套件的每个测试之前运行。
import { beforeEach } from '@rstest/core';
beforeEach(async () => {
// 每个测试前的初始化逻辑
});
afterEach
- 类型:
(fn: () => void | Promise<void>, timeout?: number) => void
在当前套件的每个测试之后运行。
import { afterEach } from '@rstest/core';
afterEach(async () => {
// 每个测试后的清理逻辑
});
onTestFinished
- 类型:
(fn: () => void | Promise<void>, timeout?: number) => void
测试运行完成后调用,无论测试成功或失败。可用于执行清理操作。该 hook 会在 afterEach
之后执行。
import { onTestFinished, test } from '@rstest/core';
test('test server', () => {
const server = startServer();
// Register a cleanup function to close the server after the test
onTestFinished(() => server.close());
server.listen(3000, () => {
console.log('Server is running on port 3000');
});
});
需要注意的是,当你在并发测试中使用 onTestFinished
hook 时,你应当从测试上下文中获取该 hook。这是因为 Rstest 在并发测试中无法准确追踪来自全局的 onTestFinished hook 所属的具体测试。
describe.concurrent('并发套件', () => {
test('test 1', async ({ onTestFinished }) => {
/* ... */
});
test('test 2', async ({ onTestFinished }) => {
/* ... */
});
});