gpt4 book ai didi

chef-infra - 在chefspec中模拟外部提供者

转载 作者:行者123 更新时间:2023-12-05 00:48:22 28 4
gpt4 key购买 nike

我正在尝试使用 ChefSpec 在 Chef 中测试提供程序。在这个提供者中,我正在调用另一个外部提供者,我想模拟/禁用它,以便只执行我的提供者,而不是外部提供者。

我的提供者基本上是这样的:

action :deploy do
app = new_resource.app
deploy_data = new_resource.deploy_data

opsworks_deploy do
deploy_data deploy_data
app app
end

Chef::Log.debug("This is where the actual code to test is located.")

end

我想我可以通过使用 Chef::Provider::LWRPBase.build_from_file 以某种方式 mock 它使用空提供程序来提供外部提供程序模拟。虽然显然有一个 Resource 和 Provider 正在生成,但它显然没有在它应该在的地方注册,因为测试仍然提示缺少外部提供者。

任何想法、提示或示例都很棒 - 我发现的所有提供程序测试示例都使用更简单且自包含的提供程序,因此它们在这里并没有真正的帮助。

如果需要更多上下文,可以在此处找到相关提供者: https://github.com/fh/easybib-cookbooks/blob/0a9f7935371d6dc89796e83041cf5092bd96167a/easybib/providers/deploy.rb我的测试的(蹩脚的、不工作的、正在进行的版本)在这里: https://github.com/fh/easybib-cookbooks/blob/0a9f7935371d6dc89796e83041cf5092bd96167a/easybib/spec/easybib_deploy_spec.rb

编辑:基本上,这里的问题不是如何用 stub “覆盖”我的 Recipe 中现有的提供者,而是如何在 ChefSpec 运行期间以编程方式创建和提供提供者,而我正在测试的 Recipe 中不存在该提供者。

最佳答案

您需要 stub 创建的类:

let(:my_double) { double('opsworks_deploy') }
Chef::Resource::OpsworksDeploy.stub(:new).and_return(my_double)

关于chef-infra - 在chefspec中模拟外部提供者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22511759/

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