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

无法在GitHub Actions中用Docker Compose为NestJS配置E2E测试

解决GitHub Actions中Docker运行E2E测试时ts-jest缺失的问题

问题分析

本地通过Docker Compose执行npm run test:e2e正常,但GitHub Actions中运行时报错Module ts-jest in the transform option was not found,核心原因是Docker镜像构建时未安装开发依赖——ts-jest属于开发依赖范畴,若构建镜像仅安装生产依赖,会直接导致测试环节找不到该模块。

解决方案

1. 修改Dockerfile的依赖安装逻辑

确保Dockerfile中安装完整依赖(包含开发依赖),避免使用npm install --production这类仅安装生产依赖的命令:

WORKDIR /app
COPY package*.json ./
# 安装所有依赖(含开发依赖)
RUN npm install
COPY . .

2. 多阶段构建优化(可选)

如果需要兼顾生产镜像体积,可采用多阶段构建,测试阶段使用包含开发依赖的镜像阶段:

# 构建阶段:安装全量依赖并编译代码
FROM node:16.17 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

# 生产阶段:仅复制编译产物和生产依赖
FROM node:16.17
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY --from=builder /app/dist ./dist

# 测试时指定使用builder阶段镜像,或在测试步骤中临时安装开发依赖

3. 调整GitHub Actions执行步骤

若不想修改Dockerfile,可在测试前临时在容器内安装开发依赖:

- name: 运行E2E测试
  run: |
    docker-compose -f docker-compose.yml build
    docker-compose -f docker-compose.yml run backend-core npm install
    docker-compose -f docker-compose.yml run backend-core npm run test:e2e

4. 验证jest配置文件

确认test/jest-e2e.json中的transform配置和rootDir路径正确:

{
  "moduleFileExtensions": ["js", "json", "ts"],
  "rootDir": ".",
  "testEnvironment": "node",
  "testRegex": ".e2e-spec.ts$",
  "transform": {
    "^.+\\.(t|j)s$": "ts-jest"
  }
}

关键注意点

  • 本地环境已提前安装全量依赖,因此测试正常,但Docker镜像默认可能仅包含生产依赖,导致测试环节缺失开发依赖模块。
  • 采用多阶段构建时,必须确保测试阶段使用的是包含开发依赖的镜像阶段。

内容的提问来源于stack exchange,提问作者Sanketh B. K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 12:03:15