準備
テスト用の cookbook の作成
cd ${Chef_Repos}/site-cookbooks knife cookbook create apache_install -o ./
chefspec のインストール
gem からインストールする。
gem install chefspec --no-ri --no-rdoc
example のひな形を用意する(ChefSpec ではテストケースのことを「example」と呼ぶ)。
knife cookbook create_specs apache_install -o ./
実行後、apache_install ディレクトリ内に spec というディレクトリが出来ていて、その中に default_spec.rb というファイルが生成されている。
kappa@X1Carbon:~/git/chef-cookbooks/apache_install$ ls CHANGELOG.md attributes files metadata.rb recipes spec README.md definitions libraries providers resources templates
default_spec.rb を書きつつ cookbook を作成していく...
※詳しいテストコードと recipe は下記のリンク(github)をご確認下さい。
- 作成した default_spec.rb
- default_spec.rb を基に作成した recipe
実際にテストを走らせてみる
以下のように rspec コマンドを実行することで、example を基にしたテスト(構文や諸々のチェック)を行なってくれる。
rspec -fd --color apache_install
問題が無い場合には下記のような表示となる。
recipe に構文エラーがあった場合等は下記のように警告してくれる。その他、example 自体にもエラーがあれば都度、エラーで警告してくれる。
Warning
should ではなく to を使いなさい
どうやら should ではなくて to を使うのがシェフの流儀らしく、テスト自体は通るものの、下記のようなエラーが出てしまう。
* `expect { }.should` is deprecated. * please use `expect { }.to` instead.
まとめ
- テストの為にコードを書くという概念が全くなかったので新鮮だった
- 但し、Ruby 力が求められるので辛い...
- レシピ自体を上から順番に評価していくが notifies 等があった場合、ちゃんと前後の関係も評価してくれるのが素晴らしい(と思う)
- ChefSpec さえインストールされていればインターネットにつながらなくてもローカル PC だけで cookbook の確認が出来るのが有難い