Posted at

chefspecのattributesをassertする

More than 5 years have passed since last update.

cookbookをごりごり共通化していると、attributesを多用することになりがちです。

attributesを使うメリットはnode, role等から上書きできる、つまり、cookbookを利用する段になって、値を上書き出来る事です。

故に定義できる場所もattributesの他、role, node, environment等多岐に渡る上、その値を利用してrecipeで加工している場合など、書いている自分すらよくわからなくなってしまいがちです。

というわけで、chefのattributesをassertするようなテストを書きます。


attribute_assert_recipe

if hofe == foo

node.set[:your][:attribute] = xxxx
else
node.set[:your][:attribute] = "value!"
end

こんな感じでrecipe内で分岐してattributeをセットしているとき...


chefspec_attribute_assert

describe 'chefspec sample' do

let (:chef_run) do
chef_run = ChefSpec::ChefRunner.new.converge 'attribute::assert'
end
it 'assert attribute' do
expect(chef_run.node[:your][:attribute]).to eql "value!"
end
end

このような感じでattributeの値を取得してassertする事ができます。