我如何写一个单元测试的厨师供应商?单元测试厨师提供商
到目前为止,我们的单元测试策略使用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