Ginkgoは、標準のテストフレームワークではないので、素の設定だとGoLandから使いづらいです。
テスト実行結果が見づらかったり、テスト実行範囲が広すぎたりします。
それらを解決する方法を記します。
前提のテストコード
以下のGinkgoのテストコードがあるとします。
import (
"testing"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
)
func TestGinkgoSandbox(t *testing.T) {
RegisterFailHandler(Fail)
RunSpecs(t, "GinkgoSandbox Suite")
}
import (
. "github.com/onsi/ginkgo"
)
var _ = Describe("Describe1", func() {
It("It1-1", func() {})
It("It1-2", func() {})
})
var _ = Describe("Describe2", func() {
It("It2-1", func() {})
})
普通にテストを実行する
- GoLandでテストコードのファイルGinkgoSandbox_suite_test.goを開きます
- Run -> TestGinkgoSandbox in GinkgoSandbox_suite_test.goを選択します
- テストは成功しますが、実行されているSpecは0です
- 初期設定だと、Specの書かれたファイルがコンパイル対象になっていないためです
- Run -> Edit Configurations ...
- Test kindをFileからDirectory or Packageにする(ここではDirectoryで説明します)
- Directoryに、GinkgoSandbox_suite_test.goが置かれているディレクトリを選択する
- GoLandからもう1回テストを実行します
- 今度はSpecが実行されます
テスト実行結果
Specの実行結果が全く表示されないので、分かりづらいですね。
これはGinkgoが出力するテスト実行結果をGoLandが解釈できないためです。
次は、GoLandでSpecの情報を表示する設定を説明します。
Specの実行結果を分かるようにする
Ginkgoのテスト実行結果のReporterの設定
Ginkgoには、テスト実行結果のReporterを変更することができます。
GoLand向けのReporterがあるのでそれを設定します。
https://pkg.go.dev/を見ると、ほぼ同じものが乱立していますが、v1.0.1となっているものを使います。
https://pkg.go.dev/github.com/TaylorOno/golandreporter
import (
"testing"
. "github.com/TaylorOno/golandreporter"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
)
func TestGinkgoSandbox(t *testing.T) {
RegisterFailHandler(Fail)
RunSpecsWithDefaultAndCustomReporters(t, "GinkgoSandbox Suite", []Reporter{NewAutoGolandReporter()})
}
Reporterは、GolandReporterとAutoGolandReporterの2種類ありますが、GoLandからテストを実行したときだけテスト実行結果の出力を変えたいので、後者を使います。
GoLandのテスト実行設定
AutoGolandRepoterを選択したので、GoLand上のテスト実行設定も変える必要があります。
ポイントは、環境変数"OLDPWD"に"goland"を設定することです。こうすることで、ReporterはGoLand用のテスト実行結果を出力してくれます。
設定後のGoLandのテスト実行結果
Specの実行結果が表示されるようになりました!
実行対象のSpecを絞る
GoLandのテスト実行設定のProgram argumentsに"-ginkgo.focus REGEXP"を指定します。REGEXPにマッチするDescribeを持つSpecが実行対象になります。
テスト実行結果は以下です。"Describe1"のSpecは実行されず、"Describe2"のSpecだけ実行されています。