我如何寫一個單元測試的廚師供應商?單元測試廚師提供商
到目前爲止,我們的單元測試策略使用ChefSpec食譜,和我們大多數的東西在圖書館有趣的邏輯,我們的供應商,使邏輯更容易測試。然而,我們仍然遇到問題,我們的提供者正在調用其他資源(以及其他簡單的邏輯問題)。例如:
action :run do
helper = Helper.new
template '/etc/hosts' do
source 'hosts.erb'
variables ({
"host" => @new_resource.host,
"ip_address" => node['ipaddress']
})
only_if { helper.update_hosts }
end
service 'httpd' do
action :restart
end
end
(這不是真正的代碼,只是一個簡單的例子)
我們想要做的是測試這個供應商在隔離檢查邏輯錯誤。 ChefSpec已經步入一個LWRP的能力,但它看起來像這將迫使我們把LWRP成一個配方,我們的許多食譜基本上沒有食譜LWRP庫。我們也想在我們的測試中保持乾淨的分離,所以通過查看文件名顯然是什麼組件失敗。
此外,這將是很好,如果,如果有在LWRP定義的任何語法錯誤的測試將自動失效。例如:
action :run do
template '/etc/hosts/' do
source_whoops 'hosts.erb'
action :whoops
end
end
這將是非常好的,如果上面的語句會導致測試由於屬性名稱不能被錯誤地定義,操作名稱不存在(就像ChefSpec)。
我想出的唯一解決方案是基本上創建一個「測試食譜」 - 一個單獨的食譜,用單一配方定義每個LWRP 1:1,所以ChefSpec可以這樣做。這似乎是一個合理的,但不是理想的解決方案。
是。這正是我所說的:) – sethvargo