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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 05:57:01