Как stub_command в ChefSpec?

У меня есть это условие в моем рецепте:

install_action = (::Win32::Service.exists?(windows_service['name']) ? :configure : :create)

и ChefSpec для этого в файле спецификаций:

#1: not working 
allow_any_instance_of(Win32::Service)
                .to receive(:exists?)
                .with(windows_service[:name])
                .and_return(true)
#2: also not working
stub_command("::Win32::Service.exists?(#{windows_service[:name]})").and_return(true)

Не могли бы вы помочь выяснить, что я пропустил в тесте ChefSpec, который не работает и имитирует возвращаемое значение. Спасибо


person SmNg1028    schedule 16.06.2019    source источник


Ответы (1)


Это должно работать:

allow(::Win32::Service).to receive(:exists?).with(windows_service[:name]).and_return(true)

Дело в том, что вы заглушаете метод класса exists?, а не метод экземпляра. Вот почему allow_any_instance_of не работает. И stub_command на самом деле для команд оболочки, таких как stub_command('cat file | grep "hello"')

person Draco Ater    schedule 17.06.2019