【问题标题】:Makefile: Terminates after running commands "go test ./..."Makefile:运行命令“go test ./...”后终止
【发布时间】:2020-12-30 03:54:54
【问题描述】:

我在从 makefile 运行“go test”时遇到了问题。这一切背后的想法是启动一个 docker 容器,针对它运行所有测试,然后停止并删除该容器。

容器启动并运行测试,但最后两个命令(docker stop 和 rm)未执行。
Make 返回此消息: make: *** [test] Error 1

是“go test”终止makefile执行吗?

.PHONY: up down test

up:
    docker-compose up

down:
    docker-compose down

test:
    docker run -d \
        --name dev \
        --env-file $${HOME}/go/src/test-api/testdata/dbConfigTest.env \
        -p 5432:5432 \
        -v $${HOME}/go/src/test-api/testdata/postgres:/var/lib/postgresql/data postgres
    
    # runs all tests including integration tests.
    go test ./... --tags=integration -failfast -v
    # stop and remove container
    docker stop `docker ps -aqf "name=dev"`
    docker rm `docker ps -aqf "name=dev"`

【问题讨论】:

  • 尝试将|| true 添加到行尾以禁止返回代码,看看是否有区别。
  • 前缀 go test- 以忽略错误,-go test
  • @LaurenzAlbe 这解决了我的问题。非常感谢,周末愉快!
  • @Milag 也可以!我将使用此解决方案,因为输出更明确。

标签: postgresql go testing makefile


【解决方案1】:

假设您希望“make test”返回测试状态,请考虑对 makefile 进行以下更改

test:
    docker run -d \
        --name dev \
        --env-file $${HOME}/go/src/test-api/testdata/dbConfigTest.env \
        -p 5432:5432 \
        -v $${HOME}/go/src/test-api/testdata/postgres:/var/lib/postgresql/data postgres
    
    # runs all tests including integration tests.
    go test ./... --tags=integration -failfast -v ; echo "$$?" > test.result
    # stop and remove container
    docker stop `docker ps -aqf "name=dev"`
    docker rm `docker ps -aqf "name=dev"
    exit $$(cat test.result)

它使用 test.result 文件从测试中捕获退出代码

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    • 1970-01-01
    • 2016-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多