stub_command с переменными атрибута узла - PullRequest
0 голосов
/ 11 июня 2018

У меня есть Google, кажется, это можно сделать, но я, очевидно, просто делаю это неправильно.

Итак, я пытаюсь запустить этот фрагмент powershell_script:

powershell_script 'Unzip' do
  code <<-EOH
  Expand-Archive -Path 'E:\\apache-tomee-1.7.4-plus.zip' -DestinationPath "E:\\#{node['COOKBOOK']['Product']}-#{node['COOKBOOK']['Region']}-" + count.to_s.rjust(2, "0")"
  EOH
  guard_interpreter :powershell_script
  not_if "Test-Path -Path E:\\#{node['COOKBOOK']['Product']}-#{node['COOKBOOK']['Region']}-01"
end

Теперь эти атрибуты узла установлены в атрибутах default.rb

default['COOKBOOK']['Product'] = 'product'
default['COOKBOOK']['Region'] = 'region'

У меня проблема с получением того, что должно быть в файле спецификации.

require 'spec_helper'
describe 'COOKBOOK::default' do
  context 'when all attributes are default, on Windows 2012R2' do
    let(:chef_run) do
      # for a complete list of available platforms and versions see:
      # https://github.com/customink/fauxhai/blob/master/PLATFORMS.md
      runner = ChefSpec::ServerRunner.new(platform: 'windows', version: '2012R2')
      runner.converge(described_recipe)
    end
    it 'converges successfully' do
      stub_command('Test-Path -Path E:\\#{node['COOKBOOK']['Product']}-#{node['COOKBOOK']['Region']}-01').and_return(true)
      expect { chef_run }.to_not raise_error
    end
  end
end

Кто-нибудь может мне помочь?

Заранее спасибо.

1 Ответ

0 голосов
/ 11 июня 2018

Во-первых, у вас есть проблема со строкой stub_command.У вас есть строка, заключенная в одинарные кавычки, так что эти интерполяции для атрибутов не будут работать, поэтому заключите их в двойные кавычки:

stub_command("Test-Path -Path E:\\#{node['COOKBOOK']['Product']}-#{node['COOKBOOK']['Region']}-01").and_return(true)

Теперь вы получите эту ошибку:

 NameError:
   undefined local variable or method `node' for #<RSpec::ExampleGroups::ExampleSoDefault::WhenAllAttributesAreDefaultOnWindows2012R2:0x0000000004066720>

Атрибуты вашего узла недоступны в ваших тестах rspec.Кроме того, rspec распознает ваш not_if с уже замененными атрибутами, например:

not_if "Test-Path -Path E:\\product-region-01"

Поэтому вам нужно ввести эту команду в тупик, как показано ниже:

require 'spec_helper'
describe 'example-so::default' do
  context 'when all attributes are default, on Windows 2012R2' do
    let(:chef_run) do
      # for a complete list of available platforms and versions see:
      # https://github.com/customink/fauxhai/blob/master/PLATFORMS.md
      runner = ChefSpec::ServerRunner.new(platform: 'windows', version: '2012R2')
      runner.converge(described_recipe)
    end
    it 'converges successfully' do
      stub_command('Test-Path -Path E:\\product-region-01').and_return(true)
      expect { chef_run }.to_not raise_error
    end
  end
end

Если выДля проверки нескольких различных настроек атрибутов вы можете установить атрибуты и запустить тесты для каждого набора условий.

...