2017-04-26 3 views
0

저는 RESTful http API를 제공하는 Go 프로젝트를 만들고 있습니다.Travis-CI에서 Go 서버를 실행하는 방법은 무엇입니까?

Go 프로젝트를 실행하고 Nodejs (모카)를 사용하여 끝점을 테스트하고 싶습니다. 마치 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

가 nodejs를 사용하지 마십시오 - P 테스트를 이동하는 이동합니다. Go에 API 테스트를 작성하고 표준 이동 테스트 프레임 워크를 사용하십시오. 그런 다음 Go 서버가 테스트 프레임 워크의 일부로 실행되므로 문제가 발생하지 않습니다. – Flimzy

+0

감사합니다 @Flimzy, 요점이 찍히고 이것은 내가 무엇을 할 것입니다. 감사합니다 :-) –

답변

3

먼저 모카에서 필기 시험이 의미가 있는지 여부에 대해 심각하게 질문해야합니다. 분명히 이해할 수있는 경우가 있습니다 (예 : nodejs 앱을 이동으로 이식하고 이미 노드 용 테스트가 작성된 경우). 그러나 그때조차도, 당신은 이것을 stop-gap 측정으로 생각하고 모든 새로운 테스트를 작성하고 오래된 테스트를 가능한 한 빨리 Go로 마이그레이션해야합니다.

하지만 제쳐두고 정상적으로 백그라운드에서 프로세스를 시작할 수 없어야하는 이유는 없습니다. 아마도 당신의 트래비스의 설정에서 호출 쉘 스크립트 (종종 직접 설정에서 모든 명령을 넣어보다 따라 깨끗하고 쉽게 할 수 있습니다) :

#!/bin/sh 

go run & 

mocha 

당신이 정말로 외부 프로세스에서 테스트를 실행해야하는 경우가 있습니다 어쨌든 Go 시험에서 시작하면 어떤 장점이 있습니다. 즉, 테스트 커버리지 통계를 얻을 수 있으며 시작을보다 쉽게 ​​동기화 할 수 있습니다 (따라서 sleep은 필요하지 않습니다). 이렇게하려면 내 조언을 따르십시오 this answer. 특히, 모카 경우에 :

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

하지만 심각 :

는 일상적인 이동에 main() 함수를 실행하는 테스트 파일을 작성합니다. Go에 테스트를 작성해야합니다.

+0

감사합니다. 요점이 찍 힙니다. 즉시 테스트를 전송하겠습니다 :-) –

+0

@BobvanLuijt 맞습니다. –

0

모카는 - 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 

그러나, 나는