使用Prisma为SvelteKit应用创建测试数据库的正确方法
用Prisma为Vitest创建SQLite测试数据库的正确方式
完全可以通过覆盖DATABASE_URL环境变量,在测试套件运行前执行prisma db push或migrate来创建并初始化测试数据库,具体步骤如下:
1. 配置测试专属数据库URL
你可以通过两种方式指定测试数据库的地址:
- 方式一:使用.env.test文件
在项目根目录创建.env.test文件,写入测试数据库的URL:
DATABASE_URL="file:./test.db"
Vitest会自动加载这个环境文件(需确保vitest配置中启用了环境文件加载)。
- 方式二:在Vitest配置中直接设置
修改vitest.config.ts,在test.env里指定测试数据库URL:
import { defineConfig } from 'vitest/config'; import { sveltekit } from '@sveltejs/kit/vite'; export default defineConfig({ plugins: [sveltekit()], test: { environment: 'jsdom', env: { DATABASE_URL: 'file:./test.db' } } });
2. 编写测试前置初始化脚本
创建tests/setup.ts文件,用于在所有测试执行前初始化数据库并填充测试数据:
import { execSync } from 'child_process'; import { PrismaClient } from '@prisma/client'; const prisma = new PrismaClient(); // 所有测试执行前运行 beforeAll(async () => { // 同步Schema到测试数据库,--force-reset确保数据库干净 execSync('npx prisma db push --force-reset', { stdio: 'inherit' }); // 填充测试数据 await prisma.user.createMany({ data: [ { name: '测试用户1', email: 'test1@example.com' }, { name: '测试用户2', email: 'test2@example.com' } // 根据你的Schema添加更多测试数据 ] }); }); // 所有测试结束后清理 afterAll(async () => { await prisma.$disconnect(); });
然后在vitest.config.ts中引入这个前置脚本:
// 追加到test配置中 test: { // ...其他配置 setupFiles: ['./tests/setup.ts'] }
关键细节说明
- 使用
prisma db push而非migrate:适合测试场景,无需手动创建迁移文件,直接将Schema同步到数据库;如果你的项目依赖迁移历史,也可以替换为npx prisma migrate deploy。 --force-reset参数:每次测试前强制重置数据库,避免旧数据干扰测试结果。- 测试数据库隔离:测试用的
test.db与开发数据库完全分离,不会污染开发环境的数据。
内容的提问来源于stack exchange,提问作者Anna
相关产品推荐
相关产品推荐

