如何在Travis-CI中运行Go服务器?

时间:2017-04-26 13:46:34

标签: node.js go travis-ci

我正在开发一个暴露RESTful http API的Go项目。

我想运行Go项目并使用Nodejs(Mocha)来测试端点。似乎nohup命令不会在后台运行。

本地一切正常但我似乎无法在Travis-ci中运行。

language: go
go:
  - 1.8
env:
  - "PATH=/home/travis/gopath/bin:$PATH"
before_install:
  - go get ./...
script:
  - npm install mocha -g
  - npm install
  - nohup go run ./cmd/server/main.go --scheme=http --port=8080 --host=127.0.0.1 &
  - mocha

2 个答案:

答案 0 :(得分:3)

首先,你应该认真地质疑在摩卡中编写测试是否有意义。不可否认,有些情况确实有意义(例如,如果您将一个nodejs应用程序移植到Go,并且已经为节点编写了测试)。但即便如此,你应该考虑这是一个权宜之计,并尽快将所有新测试,甚至是旧测试迁移到Go。

但除此之外,你没有理由不能正常地在后台启动这个过程。也许使用从Travis配置中调用的shell脚本(通常比直接在配置中放入所有命令更简洁,更容易理解):

#!/bin/sh

go run &

mocha

如果您真的必须在外部流程中运行测试,那么从Go测试开始,无论如何都有一些优势。也就是说,您可以获得测试覆盖率统计信息,并且可以更轻松地同步启动(因此您不需要sleep)。为此,您可以在this answer中遵循我的建议。具体来说,对于mocha案例:

在go例程中编写一个执行main()函数的测试文件:

func TestMainApp(t *testing.T) {
    go main() // Or whatever you need to do to start the server process
    cmd := exec.Command("mocha", ...)
    cmd.Start()
}

但是说真的。你应该在Go中编写测试。

答案 1 :(得分:0)

Mocha在- nohup go run ./cmd/server/main.go --scheme=http --port=8080 --host=127.0.0.1 &之后直接运行,因此服务器尚未启动。

添加睡眠就足够了。

script:
  - npm install mocha -g
  - npm install
  - nohup go run ./cmd/server/main.go --scheme=http --port=8080 --host=127.0.0.1 &
  - sleep 4
  - mocha

但是,重点是,我将转向Go测试:-P