gpt4 book ai didi

ruby - 如何在厨房 serverspec 测试中要求 Recipe 库

转载 作者:数据小太阳 更新时间:2023-10-29 08:03:55 27 4
gpt4 key购买 nike

在一本 Recipe 上,我定义了一个 Rds::Checks 类,它共享为 bash/execute 资源和 Guards 构建 unix 命令的方法。文件 libraries/checks.rb 的示例是:

module Rds
class Checks
class << self

def ssh_config_entry_present host, config_file, key_name
"cat #{config_file} | grep #{key_name}"
end

def redmine_migrated user, pass, name
"if [ `mysql -u#{user} -p#{pass} -e 'select count(id) FROM #{name}.users;' | sed -n '2 p'` -gt 0 ]; then echo '0'; else echo '1'; fi"
end

end
end
end

在 LWPR 提供程序、 Recipe 和 chefspec 测试中,文件加载没有问题,但是当我通过 kitchen verify 在 serverspec 中使用它时,它会引发错误。

paolo@tower:~/cookbooks/rds$ cat test/integration/install/serverspec/localhost/install_spec.rb
...
it 'do migrations' do
cmd = Rds::Checks.redmine_migrated
expect(command(cmd).stdout).to eq 0
end
...


paolo@tower:~/cookbooks/rds$ kitchen verify

...

NameError:
uninitialized constant Rds

我真的很想在公共(public)层上保留构建 bash/sh 命令的方法,这样我就可以单独测试它,而不用在单元测试和集成测试上打扰它们

最佳答案

您必须非常手动地加载它,可能会将保存 Recipe 数据的临时文件夹添加到加载路径,我认为它在 /tmp/kitchen/cookbooks 下。添加正确的 libraries/ 文件夹,然后按正常方式要求。总的来说,收敛和验证阶段彼此无关,因为测试厨房可以与 Chef 以外的其他东西一起使用。

你可能想看看像 minitest handler 这样的东西它在 Chef 聚合上下文或 audit mode proposal 中运行测试它做类似的事情。

使用类似其中之一的方法,您可以在说明书本身中编写测试,因此 converge 实际上会收敛节点然后运行测试,而 verify 要么是空操作,要么会运行额外的、外部的测试。

关于ruby - 如何在厨房 serverspec 测试中要求 Recipe 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27180214/

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