import { Client } from 'pg'; import { globalTeardown as stopServices } from './global-setup'; /** * E2E 全局 teardown。 * * 1. 停止 global-setup 启动的后端/网关服务; * 2. 连接到测试 Postgres,删除并重建 `e2e` schema,确保每次 E2E 运行都在 * 独立、干净的数据集上执行,避免测试数据相互污染。 * * 依赖 docker-compose.test.yml 中配置的 postgres 服务,以及 * application-e2e.yml 中指定的 `e2e` schema。 */ async function globalTeardown() { console.log('🧹 开始全局 E2E 测试环境清理...'); // 1. 停止由 global-setup 启动的进程 await stopServices(); // 2. 清理独立的 e2e schema const client = new Client({ host: process.env.TEST_DB_HOST || 'localhost', port: Number(process.env.TEST_DB_PORT || 5433), database: process.env.TEST_DB_NAME || 'manage_system', user: process.env.TEST_DB_USER || 'postgres', password: process.env.TEST_DB_PASSWORD || '123456', }); try { await client.connect(); console.log('🗑️ 清理 e2e schema...'); await client.query('DROP SCHEMA IF EXISTS e2e CASCADE'); await client.query('CREATE SCHEMA e2e'); console.log('✅ e2e schema 已重置'); } catch (error) { console.warn('⚠️ 重置 e2e schema 失败:', error instanceof Error ? error.message : error); console.warn(' 下次 E2E 启动时 Flyway 会尝试重新初始化,请留意迁移状态。'); } finally { await client.end().catch(() => { // 忽略关闭连接时的错误 }); } console.log('✅ 全局 E2E 测试环境清理完成'); } export default globalTeardown;