我正在开发一个暴露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
答案 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