【问题标题】:Separate docker-compose file for testing NestJS单独的 docker-compose 文件用于测试 NestJS
【发布时间】:2021-06-05 19:30:47
【问题描述】:

我有这样的主要 docker-compose 文件:

services:
   main:
      container_name: main
      build:
         dockerfile: Dockerfile
         context: './backend/'
      ports:
         - '${APP_PORT}:3000'
      volumes:
         - './backend/src:/backend/src'
      depends_on:
         - mongo

   mongo:
      container_name: mongodb
      image: mongo
      ports:
         - '27017:27017'
      environment:
         ...
      volumes:
         - mongo-data:/data/db
volumes:
   mongo-data:

/backend/Dockerfile(NestJS 根文件夹):

FROM node:14

WORKDIR /backend

COPY package*.json ./

RUN npm install

COPY src/ tsconfig*.json ./

CMD ["npm", "run", "start:dev"]

如您所见,我的容器中只有 src 文件夹,这是好的和有意的。但是,我想创建一个单独的容器,仅用于测试我的应用程序,因此我必须包含“tests”文件夹而不是“src”文件夹(或者只包含测试文件夹并使用这个容器的 src 文件夹?) .除此之外,我还想运行“jest”命令来运行 src 文件夹中的文件夹中包含的单元测试。 我不知道该怎么做。我可以通过多个容器或类似的方式共享文件夹吗?

【问题讨论】:

    标签: docker unit-testing jestjs nestjs


    【解决方案1】:

    一种方法是将您的 Dockerfile 更改为带有测试阶段的 multi-stage build
    在这里,我添加了一个 prod 和一个 testing 阶段以及您原来的 (dev) 构建阶段。

    
    FROM node:14 as dev
    WORKDIR /backend
    COPY package*.json ./
    RUN npm install
    COPY src/ tsconfig*.json ./
    CMD ["npm", "run", "start:dev"]
    
    FROM dev as testing
    COPY tests ./
    ENV CI=true
    RUN ["npn", "run", "test"]
    
    FROM dev as prod
    LABEL version="1.0" "com.example.image"="My Image"
    CMD ["npm", "run", "start"]
    
    

    你可以在你的 docker-compose-file 中 specify the build target 你想要的 with a variable

        services:
           main:
              container_name: main
              build:
                 dockerfile: Dockerfile
                 context: './backend/'
                 target: ${TARGET:-prod}
              ports:
        ...
    

    TARGET 可以在.env 文件或环境变量中设置。我设置了一个默认值,因此如果未指定,目标将变为 prod

    其他可能的解决方案是拥有多个 Dockerfile 或使用 docker-compose.override.yml 文件,其中指定了测试命令并包含不同的构建上下文。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-10
      • 1970-01-01
      • 2022-10-02
      • 1970-01-01
      • 2021-01-05
      • 1970-01-01
      • 1970-01-01
      • 2021-01-15
      相关资源
      最近更新 更多