Chef

ChefSpec - 測試 include_reciepe 時的覆蓋率

  • June 1, 2015

我正在嘗試為我們的一些食譜編寫 ChefSpec 測試。其中之一是包括許多其他食譜,以設置 Jenkins CI 環境。

我想知道其他人如何測試包含的接收器。我的“_spec.rb”現在看起來像這樣(測試範例,包括詹金斯大師):

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

現在覆蓋率下降了,因為我沒有測試包含的食譜(他們有自己的 chefspec 測試)。

如果有人有一個例子或好主意……會很棒。

好的,找到了一個 Issu,看起來這是我的 CodeCoverage 的“問題” - Windows 上的 iam:https ://github.com/sethvargo/chefspec/issues/594

.. Ubuntu下同樣的問題,沒有OSX來驗證問題(-:

如果您只想測試是否包含另一個食譜中的食譜,您可以存根 include 呼叫。

它在https://github.com/sethvargo/chefspec#include_recipe的 ChefSpec 自述文件中的範例中進行了記錄

“防止包含的配方中的資源被載入到 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

引用自:https://serverfault.com/questions/694516