如何在Docker环境下创建Adonis.js测试专用sqlite数据库
Adonis.js Vow测试环境Sqlite数据库Docker配置方案
1. 安装Sqlite依赖
在项目根目录执行命令安装sqlite3开发依赖:npm i sqlite3 -D
如果你的Docker基础镜像是Alpine版本,需要在Dockerfile的构建阶段添加原生模块编译依赖,避免安装sqlite3时报错:
# 放在安装依赖的步骤前即可 RUN apk add --no-cache python3 make g++
2. 新增Sqlite数据库连接配置
修改config/database.ts(JS项目对应config/database.js),在connections字段下新增测试专用的sqlite连接,原有PostgreSQL配置完全保留:
connections: { // 保留原有pg等连接配置不变 pg: { // 原有生产/开发环境pg配置 }, // 新增测试用sqlite连接 sqlite: { client: 'sqlite3', connection: { filename: Application.tmpPath('test/db.sqlite3') }, useNullAsDefault: true, healthCheck: false, debug: false, } }
3. 配置测试环境变量
在项目根目录新建.env.test文件(如果已存在直接修改),指定测试环境使用sqlite连接:
DB_CONNECTION=sqlite
@adonisjs/vow默认会自动加载.env.test的配置,不会覆盖你原有环境的变量。
4. 调整Docker配置
修改docker-compose.yml中你的Adonis服务配置,新增目录挂载保证sqlite文件可正常读写:
services: your-adonis-app: # 原有镜像、端口、环境变量等配置完全保留 volumes: # 保留原有挂载配置,新增tmp目录挂载 - ./tmp:/app/tmp
Sqlite是文件型数据库,不需要额外新增服务容器到docker-compose中,原有2个PostgreSQL服务无需修改。
5. 测试流程配置(可选)
可以在Vow的启动钩子中添加事务控制,保证每次测试都是干净的数据库环境,避免脏数据:
修改test/bootstrap.ts的runnerHooks配置:
import Database from '@ioc:Adonis/Lucid/Database' export const runnerHooks: Required<Pick<Config, 'setup' | 'teardown'>> = { setup: [ // 测试启动前开启全局事务 () => Database.beginGlobalTransaction(), () => import('@ioc:Adonis/Lucid/Factory').then(f => f.Factory.boot()), ], teardown: [ // 测试结束后回滚全局事务,自动清理测试数据 () => Database.rollbackGlobalTransaction(), ], }
6. 执行测试
在Docker容器内执行测试命令即可,全程只会操作sqlite测试库,不会影响主数据库:docker-compose exec your-adonis-app node ace test
内容的提问来源于stack exchange,提问作者Javito Bertolino
相关产品推荐
相关产品推荐

