Наша кулинарная книга используется как на компьютерах с Linux, так и на Windows, и когда она работает/сходится, код отлично работает на обоих типах систем. Однако тест rake unit в Linux не проходит. У меня в рецепте:
service 'MyService' do
action %i[enable start]
only_if { ::Win32::Service.exists?("MyService") }
not_if { ::File.exist?("#{install_dir}\\scripts\\instance-stopped") }
end
Ошибка, которую мы получаем:
Неудачи:
perfagent::install_windows Если установлено, что агент для установки в Windows успешно сходится Сбой/Ошибка: expect { chef_run }.to_not raise_error
не ожидал исключения, получил #‹NameError: неинициализированная константа Win32› с обратной трассировкой: # /tmp/chefspec20200924-2530-350e0zfile_cache_path/cookbooks/perfagent/resources/install_agent.rb:83:in `блок (3 уровня) в class_from_file'
Возможно ли только для систем Linux фиктивное значение в моем файле спецификаций для only_if выше, чтобы мой модульный тест rake выполнялся успешно всякий раз, когда мы запускаем rake в Linux?
Обновлять:
Поскольку поваренная книга выполняется как в системах Linux, так и в Windows, у нас есть проверка на ранней стадии выполнения поваренной книги, например:
if node['platform_family'] == 'windows'
include_recipe 'cookbook::install_windows'
elsif node['platform_family'] == 'rhel'
include_recipe 'cookbook::install_linux'
else
log "This OS family (#{node['platform_family']}) is not supported" do
level :info
end
end
Это означает, что поваренная книга вызывает только соответствующие рецепты в зависимости от platform_family. Однако, когда мы запускаем rake unit в Linux, мы получаем указанную выше ошибку, а в Windows rake работает успешно.
Я пробовал добавить:
allow(::Win32::Service).to receive(:exists?).with(windows_service[:name]).and_return(true)
в спецификационный файл, но это по-прежнему не работает в Linux и приводит к сбою rake-модуля Windows.