Chart用のRSpecテストの記述
以下は、GitLab ChartのRSpecテストを作成する際の注意点と規約です。
RSpecテストのフィルタリング
開発を支援するために、:focus
1 つ以上のテストにタグを :focus
追加することで、どのテストが実行されるかをフィルタリングすることができます。 タグを:focus
使用すると :focus
、特にタグ付けされた_テストだけが_実行されます。 これにより、RSpec のすべてのテストが実行されるのを待つことなく、新しいコードを素早く開発したりテストしたりすることができます。 以下は、:focus
でタグ付けされたテストの例です。
describe 'some feature' do
it 'generates output', :focus => true do
...
end
end
:focus
タグは、describe
、context
、it
ブロックに追加することができ、テストまたはテストグループを実行することができます。
ChartからYAMLの生成
Chartのテストの多くは、多くのChart入力に対して正しいYAML構造を生成するかどうかです。 これは次のようにHelmTemplateクラスを使って行われます:
obj = HelmTemplate.new(values)
結果のobj
は、Kubernetes オブジェクトkind
とオブジェクト名 (metadata.name
) によってインデックス化されたhelm template
コマンドによって返された YAML ドキュメントをエンコードします。 このインデックス化された値は、YAML 内の値を見つけるためにほとんどのメソッドで使用されます。
使用例:
obj.dig('ConfigMap/test-gitaly', 'data', 'config.toml.erb')
これは、test-gitaly
ConfigMapに含まれるconfig.toml.erb
ファイルの内容を返します。
HelmTemplate
クラスを使用すると、helm template
コマンドを実行する際、常に “test” というリリース名が使用されます。チャート入力
HelmTemplate
クラスのコンストラクタへの入力パラメータは、Helmvalues.yaml
コマンドラインで使用さ values.yaml
れる値を表す辞書ですvalues.yaml
。 この辞書は values.yaml
ファイルのvalues.yaml
YAML 構造を反映 values.yaml
します。
describe 'some feature' do
let(:default_values) do
{ 'certmanager-issuer' => { 'email' => 'test@example.com' } }
end
describe 'global.feature.enabled' do
let(:values) do
{
'global' => {
'feature' => {
'enabled' => true
}
}
}.merge(default_values)
end
...
end
end
上のスニペットは、複数のテストに共通するデフォルト値を設定し、それを特定のテストのHelmTemplate
コンストラクタで使用する最終的な値にマージするという、よくあるパターンを示しています。
結果のテスト
HelmTemplate
オブジェクトには、RSpec テストを書く際に役立つメソッドがいくつもあります。
.exit_code()
これは、Kuberneteshelm template
クラスターでChartをインスタンス化するYAMLドキュメントを作成するために使用されたコマンドの helm template
終了コードを返しますhelm template
。 成功 helm template
すると、終了コード0が返されます。
.dig(key, ...)
HelmTemplate
インスタンスによって返された YAML ドキュメントをウォークダウンし、最後のキーに存在する値を返します。 値が見つからない場合はnil
が返されます。
.volumes(item)
指定されたデプロイオブジェクトのすべてのボリュームの配列を返します。 返される配列は、デプロイオブジェクトからvolumes
キーを直接コピーしたものです。
.find_volume(item, volume_name)
指定されたデプロイ・オブジェクトから、指定されたボリュームの辞書を返します。
.projected_volume_sources(item, mount_name)
指定された投影ボリュームのソースの配列を返します。 返される配列の構造は以下のとおりです:
- secret:
name: test-rails-secret
items:
- key: secrets.yml
path: rails-secrets/secrets.yml
.stderr()
helm template
コマンド実行時の STDERR 出力を返します。
.values()
helm template
コマンドの実行に使用されたすべての値の辞書を返します。