gpt4 book ai didi

unit-testing - 对 Chef 提供程序进行单元测试

转载 作者:行者123 更新时间:2023-12-04 04:39:19 27 4
gpt4 key购买 nike

如何为 Chef 提供程序编写单元测试?

到目前为止,我们的单元测试策略使用 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 可以通过这种方式进入它。这似乎是一个合理但不太理想的解决方案。

最佳答案

看起来有一个(最近的)解决方案。

一、this pull request基本上会按照我的要求做,尽管出于可以理解的原因,它已被 ChefSpec 维护者拒绝。

维护者建议使用 mycookbook_test 模式 - 一个单独的食谱保存所有单元测试。这将允许一个简单的 1 recipe-per-lwrp 方法。

此外,这种方法使说明书没有任何单元测试,这对说明书的消费者来说是很好的。消费者可能想要运行他们自己的单元测试,并且没有必要(或希望)在第三方说明书上运行测试。

关于unit-testing - 对 Chef 提供程序进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21169535/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com