Chefspec не повторяет массив

У меня есть рецепт для установки компонентов для IIS. Так как есть много, это массив, который подается в windows_feature установить блок. Вот так:

 strings.each do |st|
     windows_feature st do
        guard_interpreter :powershell_script
         not_if "$ret = Get-WindowsOptionalFeature -Online -FeatureName #{st}; if ($ret.State -eq 'Disabled' ) { return 'false'} else {return 'true'}"
         action :install
     end
 end

Мой связанный блок Chefspec содержит тот же поток содержимого массива. Блок такой:

describe 'HEQIIS::IIS' do
     let(:chef_run) { ChefSpec::SoloRunner.converge('HEQIIS::IIS') }
   strings.each do |st|
     it "installs_#{st}" do
       stub_command("$ret = Get-WindowsOptionalFeature -Online -FeatureName #{st}; if ($ret.State -eq 'Disabled' ) { return 'false'} else {return 'true'}").and_return(false)
       expect(chef_run).to install_windows_feature("#{st}")
     end
   end
 end

Когда я запускаю Chefspec в кулинарной книге, я получаю сообщение об ошибке:

HEQIIS::IIS installs_IIS-LegacyScripts
      Failure/Error: let(:chef_run) { ChefSpec::SoloRunner.converge('HEQIIS::IIS') }

      ChefSpec::Error::CommandNotStubbed:
        Executing a real command is disabled. Unregistered command:

            command("$ret = Get-WindowsOptionalFeature -Online -FeatureName IIS-WebServerRole; if ($ret.State -eq 'Disabled' ) { return 'false'} else {return 'true'}")

        You can stub this command with:

            stub_command("$ret = Get-WindowsOptionalFeature -Online -FeatureName IIS-WebServerRole; if ($ret.State -eq 'Disabled' ) { return 'false'} else {return 'true'}").and_return(...)
      # ./heqiis/spec/default_spec.rb:70:in `block (2 levels) in <top (required)>'
      # ./heqiis/spec/default_spec.rb:75:in `block (3 levels) in <top (required)>'

В ошибке, где он отображает -Featurename как "WebServerRole", он делает это для каждой строки (30 записей). Указывает, что на этом этапе выполняется только перебор первого элемента. В сочетании с тем фактом, что я определенно использую блок stub_command, я не совсем уверен, почему он дает ошибку. У кого-нибудь есть мысли?

1 ответ

Решение

В вашей спецификации ваш шеф-повар сходится в блоке let. Перемещает ли stub_command() призывает быть в before do ... end заблокировать помощь?

РЕДАКТИРОВАТЬ: действительно, ваш файл рецепта устанавливает команды всего массива, которые должны быть заглушки для каждого из вызовов spec (). Добавление второго цикла внутри блока before для заглушки всех команд решит вашу проблему.

Другие вопросы по тегам