Я пишу пользовательский ресурс для Chef. Ресурс используется для установки значений sysctl. Я в основном использую код Chef sysctl и накладываю на него некоторые ограничения. Мы не доверяем всем пользователям компании: P
Я пытаюсь поместить большую часть кода в вспомогательный модуль библиотеки, чтобы упростить тестирование кода. Я не уверен, что это лучшая практика. Дайте мне знать, если это плохая практика.
В любом случае, проблема, с которой я сталкиваюсь, заключается в попытке проверить код моей библиотеки. Всякий раз, когда я пытаюсь смоделировать команду shell_out, я всегда получаю следующую ошибку:
1) Sysctl::Helpers.set_sysctl_param
Failure/Error: subject.set_sysctl_param("key1", "value1")
NoMethodError:
undefined method `shell_out!' for Sysctl::Helpers:Module
Код библиотеки
module Sysctl
module Helpers
include Chef::Mixin::ShellOut
def self.set_sysctl_param(key, value)
shell_out!("sysctl -w \"#{key}=#{value}\"")
end
end
end
Проверка
require 'spec_helper'
describe Sysctl::Helpers do
describe '.set_sysctl_param' do
let(:shellout) { double(run_command: nil, error!: nil, stdout: '', stderr: double(empty?: true)) }
before do
allow(Chef::Mixin::ShellOut).to receive(:new).and_return(shellout)
end
it do
subject.set_sysctl_param("key1", "value1")
expect(:shellout).to receive(:run_command).with("sysctl -w \"key1=value1\"")
end
end
end
Я ценю любую помощь или советую, вы можете дать мне.
Спасибо!