TL;DR
Go の BDD テスティングフレームワーク。マッチャライブラリの Gomega と組み合わせて使う。
仕組み
公式ドキュメントでは、表現力のあるテストを書くためのフレームワークと説明されている。BDD に限らず、さまざまな場面で使われる汎用のテスティングフレームワークでもある。
テストは、次のノードを入れ子にして書く。
- コンテナノード(
Describe、Context、When): スペックを階層的にまとめる。3 つの機能は同じで、読みやすさに応じて使い分ける - セットアップノード(
BeforeEachなど): 各スペックの前に状態を準備する - サブジェクトノード(
It): 1 つのスペックのアサーションを書く
Ginkgo がテストの構造を担い、Gomega がアサーションを担う。RegisterFailHandler(Fail) で 2 つをつなぐと、Gomega の失敗が Ginkgo を通して報告される。
ginkgo コマンドも提供されている。内部では go test を呼び出しているだけである。ginkgo bootstrap でスイートのファイルを生成し、ginkgo でスイートを実行する。
注意点
公式ドキュメントによると、ginkgo コマンドのバージョンは go.mod にある Ginkgo のバージョンと合わせる必要がある。
自分の理解
かなり大きいフレームワークなので、チーム開発で採用するかは相談が必要だと思う。