You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 05:22:07