9.2 在沙盒里跑测试——测试环境与隔离:.env.test、迁移、数据清理
测试环境的核心原则:与生产完全隔离,每次测试都从干净状态开始。
为什么需要独立的测试环境
测试环境隔离的必要性:
| 风险 | 后果 | 解决方案 |
|---|---|---|
| 测试数据写入生产库 | 用户看到测试数据 | 独立数据库 |
| 测试清理生产数据 | 数据丢失 | 环境变量隔离 |
| 测试影响生产性能 | 服务变慢 | 独立服务实例 |
| 并行测试数据冲突 | 测试不稳定 | 事务回滚 |
测试环境架构
┌─────────────────────────────────────────────────────┐
│ 测试环境架构 │
├─────────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ .env.test │ │ test DB │ │ mock API │ │
│ └─────┬────┘ └─────┬────┘ └─────┬────┘ │
│ │ │ │ │
│ └───────────────┼───────────────┘ │
│ │ │
│ ┌──────▼──────┐ │
│ │ 测试运行器 │ │
│ │ Jest │ │
│ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────┘本节核心内容
| 小节 | 主题 | 解决的问题 |
|---|---|---|
| 9.2.1 | 环境隔离 | 如何配置独立的测试数据库和服务 |
| 9.2.2 | 环境变量 | 如何管理测试专用配置 |
| 9.2.3 | 数据库迁移 | 如何初始化测试数据库结构 |
| 9.2.4 | 数据清理 | 如何确保测试间的状态隔离 |
快速入门:最小测试环境配置
bash
# 1. 创建测试环境配置文件
touch .env.test
# 2. 配置测试数据库连接
echo 'DATABASE_URL="postgresql://user:pass@localhost:5432/myapp_test"' >> .env.test
# 3. 在 package.json 中添加测试脚本json
{
"scripts": {
"test": "dotenv -e .env.test -- jest",
"test:setup": "dotenv -e .env.test -- prisma migrate deploy",
"test:reset": "dotenv -e .env.test -- prisma migrate reset --force"
}
}本节小结
测试环境隔离是质量保障的基础设施。通过独立的数据库、专用的环境变量、自动化的迁移和清理机制,可以确保每次测试都在可控、可重复的环境中运行。接下来的小节将详细介绍每个环节的具体实现。
