ようへいの日々精進XP

よかろうもん

cookbook テストツール ChefSpec を使ってみた一部始終(1)

要件

準備

テスト用の 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)をご確認下さい。

実際にテストを走らせてみる

以下のように rspec コマンドを実行することで、example を基にしたテスト(構文や諸々のチェック)を行なってくれる。

rspec -fd --color apache_install

問題が無い場合には下記のような表示となる。
f:id:inokara:20130502010057p:plain

recipe に構文エラーがあった場合等は下記のように警告してくれる。その他、example 自体にもエラーがあれば都度、エラーで警告してくれる。
f:id:inokara:20130502010351p:plain

Warning

should ではなく to を使いなさい

どうやら should ではなくて to を使うのがシェフの流儀らしく、テスト自体は通るものの、下記のようなエラーが出てしまう。

* `expect { }.should` is deprecated.
* please use `expect { }.to` instead.

まとめ

  • テストの為にコードを書くという概念が全くなかったので新鮮だった
  • 但し、Ruby 力が求められるので辛い...
  • レシピ自体を上から順番に評価していくが notifies 等があった場合、ちゃんと前後の関係も評価してくれるのが素晴らしい(と思う)
  • ChefSpec さえインストールされていればインターネットにつながらなくてもローカル PC だけで cookbook の確認が出来るのが有難い