ปัญหาที่พบเจอ
เมื่อทำการทดสอบ และสร้าง coverage report ออกมาด้วยคำสั่ง
[code]
$go test -coverprofile=cover.out
$go tool cover -html=cover.out -o coverage.html
[/code]
จะเกิดปัญหาประมาณนี้
[code]
cover: can't find "api.go": cannot find package "_/Users/somkiat/data/slide/golang/poc/" in any of:
/usr/local/Cellar/go/1.8.3/libexec/src/_/Users/somkiat/data/slide/golang/poc (from $GOROOT)
/Users/somkiat/go/src/_/Users/somkiat/data/slide/golang/poc (from $GOPATH)
[/code]
ทำให้ไม่สามารถสร้างรายงานของ code coverage ในรูปแบบ HTML ได้
ดังนั้นเรามาแก้ไขปัญหากันหน่อย
เมื่อไปดูใน issue list ของ Golang พบว่า
มี
issue 17269 ชื่อว่า
cmd/cover: cannot find package in local directory outside GOPATH
ซึ่งเป็นปัญหาตั้งแต่ Golang 1.7.1 แล้ว
ตอนนี้ลองทดสอบบน Golang 1.9 beta 2 ก็ยังเกิดปัญหาอยู่
เพราะว่า issue ยังอยู่ในสถานะ open !!
แต่จากที่อ่านเห็นว่าจะแก้ไขใน version 1.9 และ 1.10 นะ
ปัญหาหลัก ๆ คือ หาไฟล์ใน project ของเราไม่เจอนั่นเอง
นั่นคือ ปัญหาเกิดจากการเข้าไปอ่านข้อมูลของ code coverage จากไฟล์ cover.out
มีข้อมูลดังนี้
[code]
mode: set
_/Users/somkiat/data/slide/golang/poc/api.go:13.53,16.2 1 0
_/Users/somkiat/data/slide/golang/poc/api.go:18.37,20.18 2 1
_/Users/somkiat/data/slide/golang/poc/api.go:23.2,23.10 1 1
_/Users/somkiat/data/slide/golang/poc/api.go:20.18,22.3 1 1
_/Users/somkiat/data/slide/golang/poc/api.go:26.13,29.2 2 0
[/code]
ปัญหาที่เกิดคือ ไม่เข้าใจ _/Users/somkiat/data/slide/golang/poc/
จะไปแก้ไข code ที่ cmd/cover tool ก็ดูลำบาก
ดังนั้นเรามาแก้ไขปัญหาเฉพาะหน้ากันก่อนดีกว่า
ด้วยการแก้ไขข้อมูลในไฟล์ cover.out ดังนี้
[code]
mode: set
./api.go:13.53,16.2 1 0
./api.go:18.37,20.18 2 1
./api.go:23.2,23.10 1 1
./api.go:20.18,22.3 1 1
./api.go:26.13,29.2 2 0
[/code]
ก็สามารถสร้างไฟล์ HTML ออกมาได้ดังนี้
แต่ถ้าต้องมาแก้ไขเองด้วยมือตลอด คงไม่ดีแน่ ๆ
ดังนั้นก็เขียน script มาใช้งานนิดหน่อย
ตามนิสัยคนขี้เกียจดังนี้
[code]
go test -coverprofile=cover.out
sed -i.bak 's/_\/Users\/somkiat\/data\/slide\/golang\/poc/./g' cover.out
go tool cover -html=cover.out -o coverage.html
[/code]
เพียงเท่านี้ก็พอไปวัดไปวาได้บ้างแล้ว
ขอให้สนุกกับการ coding ครับ