我正在尝试使用 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
一个空的提供者来提供外部提供者模拟来模拟这个。虽然显然正在生成资源和提供者,但它显然没有在应有的位置注册,因为测试仍然抱怨缺少外部提供者。
任何想法、提示或示例都会很棒——我发现的所有提供程序测试示例都使用更简单且自包含的提供程序,因此它们在这里并没有真正的帮助。
如果需要更多上下文,可以在此处找到有问题的提供者: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
编辑:基本上,这里的问题不是如何用存根“覆盖”我的食谱中的现有提供者,而是如何在 ChefSpec 运行期间以编程方式创建和提供提供者,这在我正在测试的食谱中不存在。