为什么testcafe-docker.sh忽略app-init-delay参数?

时间:2019-05-08 14:29:09

标签: docker-compose continuous-integration automated-tests e2e-testing testcafe

我正在尝试构建一个docker-compose,以将我的应用程序包含为服务,并将testcafe作为另一项服务。这两个容器都是构建和初始化的,但是我无法让testcafe等到我的应用程序可以开始运行测试时。

我尝试将--app-init-delay 30000作为参数传递给testcafe-docker.sh,但它忽略了它。

entrypoint: ["/opt/testcafe/docker/testcafe-docker.sh", "'chromium --no-sandbox'", "--app-init-delay 30000", "e2e"]

在调用testcafe-docker.sh之前,还尝试在入口点或命令中使用脚本https://github.com/Eficode/wait-for。在命令中似乎与entrypoint命令发生冲突,在入口点上使用它时,我让testcafe等待,但未运行测试以“操作超时”结束

entrypoint: ['/script/wait-for', 'app:8080 -- "/opt/testcafe/docker/testcafe-docker.sh chromium --no-sandbox e2e"']

(似乎wait-for的所有参数都必须在数组的同一条目内,才能用作入口点脚本)

这是我的docker-compose文件

version: "2"
services:
  app:
    container_name: app
    build: ./dist/docker/
    ports:
      - "8080:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./dist/docker/dependency:/dependency

  testcafe:
    container_name: testcafe
    image: testcafe/testcafe
    depends_on:
      - app
    volumes:
      - ./test/e2e:/e2e
      - ./package.json:/package.json
      - ./package-lock.json:/package-lock.json
      - ./script:/script
    entrypoint: ['/script/wait-for', 'app:8080 -- "/opt/testcafe/docker/testcafe-docker.sh chromium --no-sandbox e2e"']
#    entrypoint: ["/opt/testcafe/docker/testcafe-docker.sh", "'chromium --no-sandbox'", "--app-init-delay 30000", "e2e"]

似乎我已经很接近用等待解决问题了,但是某种程度上我的入口点语法不正确

1 个答案:

答案 0 :(得分:3)

您可以更简单地做到这一点:

  testcafe:
    container_name: testcafe
    image: testcafe/testcafe
    depends_on:
      - app
    volumes:
      - ./test/e2e:/e2e
      - ./package.json:/package.json
      - ./package-lock.json:/package-lock.json
      - ./script:/script
    entrypoint: ['/script/run.sh']

在文件夹脚本中创建run.sh并使其可执行:

#!/bin/bash

/script/wait-for app:8080 -t 60 -- /opt/testcafe/docker/testcafe-docker.sh chromium --no-sandbox e2e