I have the following file structure:
❯ tree
.
├── go.mod
├── go.sum
├── Makefile
├── p1
│ └── p1.go
└── tests
└── integration
└── integration_suite_test.go
3 directories, 5 files
Where, the p1/p1.go has a function:
❯ cat p1/p1.go
package p1
func MyTestFunction(s string) string {
return "hello " + s
}
which I am testing from a ginkgo test from a different directory:
❯ cat tests/integration/integration_suite_test.go
package integration_test
import (
"testing"
"example.com/test-ginkgo/p1"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
)
func TestIntegration(t *testing.T) {
RegisterFailHandler(Fail)
RunSpecs(t, "Integration Suite")
}
var _ = Describe("Testing external function", func() {
_ = Context("from integration test", func() {
It("and verify coverage", func() {
input := "test"
want := "hello " + input
got := p1.MyTestFunction(input)
Expect(got).To(Equal(want))
})
})
})
I execute the cases via:
$ ginkgo -r -v -race --trace --cover --coverprofile=.coverage-report.out --coverpkg=./... ./...
but ginkgo reports that no code coverage and the .coverage-report.out file is empty, even though I have specified --coverpkg to include all the directories.
❯ cat .coverage-report.out
mode: atomic
Is my expectation wrong and such a coverage across packages not possible with ginkgo ? Or am I doing something wrong ? The --coverpkg seems like not doing anything useful here.
I filed this as a issue in the ginkgo repo and the author was graceful enough to point me to the correct way to solve this.
While calling
ginkgolaunch it as below, with the correct full path (as mentioned in yourgo.modfile) mentioned for the--coverpkgparameter and it would work:Now I am able to see the
.coverage-report.outcontaining correctly.