运行 docker-compose 图像上的 mocha 单元测试

Run mocha unit-test on docker-compose images

我在nodeJs中有一个api,在微服务下运行。 到目前为止一切正常,我接下来要做的是能够 运行 对这些图像进行单元测试 (mocha)。

docker-compose.yml:

version: '3'

services:   db:
    image: mongo
    ports:
      - 27017:27017

  db-seeds:
    build: ./services/mongo-seeds
    links:
      - db

  gateway:
    build: ./services/gateway
    ports:
      - 4000:4000
    depends_on:
      - A
      - B
      - C

  A:
    build: ./services/A
    ports:
      - 4003:4000
    depends_on:
      - db

  B:
    build: ./services/B
    ports:
      - 4001:4000
    depends_on:
      - db

  C:
    build: ./services/C
    ports:
      - 4002:4000
    depends_on:
      - db

DockerFile之一:

FROM node:latest
COPY . /src
WORKDIR /src
RUN yarn
EXPOSE 4000
CMD yarn start

到目前为止我所做的是制作另一个 docker-compose 文件,它将 运行 其他 docker 文件 (DockerFile.test) :

FROM node:latest
COPY . /src
WORKDIR /src
RUN yarn
EXPOSE 4000
CMD yarn test

也尝试过:

FROM node:latest
COPY . /src
WORKDIR /src
RUN yarn
EXPOSE 4000
CMD yarn start
RUN sleep 240
CMD yarn test

它们都失败了,此时纱线测试在我的网关和服务器启动之前启动。我想做的是启动我的服务器,然后 运行 我在图像中进行单元测试,但我是 docker 的新手并且缺乏关于如何实现它的知识。

纱线测试:

"test": "NODE_ENV=test ./node_modules/.bin/mocha"

您必须 运行 mocha 与您的 docker-compose 文件在同一主机上。这也可以是 docker 图像(如果需要,可以使用 docker-compose 开始 ;)

在 运行 纱线测试之前,您必须 运行 docker- 与您的服务组合。

  • Create/Use 一个带有 docker 和 docker 的 Dockerfile-compose 和节点(对于你的情况)
  • 复制你的来源(docker-compose.yml 和其他相关来源)
  • 运行 docker-compose up -d on it
  • 运行 纱线测试

像 CloudFoundry 或 OpenStack 这样的工具可以完成这项工作。 如果您使用 CloudFoundry,我可以为您提供具体细节。

要连接多个命令,请使用 unix-cli 语法:

RUN  docker-compose up -d && \
     service1 && \
     yarn test