ChefSpec - 测试 include_reciepe 时的覆盖率

ChefSpec - 测试 include_reciepe 时的覆盖率

我正在尝试为一些 Cookbook 编写 ChefSpec 测试。其中之一就是包括很多其他 Cookbook,以设置 Jenkins CI 环境。

我想知道其他人是如何测试所包含的接收器的。我的“_spec.rb”现在看起来像这样(测试示例,包含 jenkins master):

  it 'includes the `jenkins` recipe' do
    expect(chef_run).to include_recipe('jenkins::master')
  end 

现在覆盖率下降了,因为我没有测试所包含的食谱(他们有自己的 chefspec 测试)。

如果有人有例子或好的想法......那就太好了。

好的,发现了一个 Issu,看起来这是我的 CodeCoverage 的“问题” - 我在 Windows 上:https://github.com/sethvargo/chefspec/issues/594

.. Ubuntu 下存在同样的问题,没有 OSX 来验证该问题 (-:

答案1

如果您只想测试是否包含另一本食谱中的菜谱,则可以存根包含调用。

ChefSpec 自述文件中有示例记录,网址为https://github.com/sethvargo/chefspec#include_recipe

“防止所包含配方的资源被加载到 Chef 运行中,但测试该配方是否被包含”:

describe 'example::default' do
  let(:chef_run) { ChefSpec::SoloRunner.converge(described_recipe) }

  before do
    allow_any_instance_of(Chef::Recipe).to receive(:include_recipe).and_call_original
    allow_any_instance_of(Chef::Recipe).to receive(:include_recipe).with('other_cookbook::default')
  end

  it 'includes the other_cookbook' do
    expect_any_instance_of(Chef::Recipe).to receive(:include_recipe).with('other_cookbook::default')
    chef_run
  end
end

相关内容