Во-первых, у вас есть проблема со строкой 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
Если выДля проверки нескольких различных настроек атрибутов вы можете установить атрибуты и запустить тесты для каждого набора условий.