Как написать единичный тест для поставщика шеф-повара?Единичное тестирование поставщика шеф-повара
До сих пор наша стратегия тестирования устройств использовала для рецептов ChefSpec, и мы используем большую часть интересной логики для наших поставщиков в библиотеках, чтобы сделать логику более пригодной для тестирования. Тем не менее, мы все еще сталкиваемся с проблемами, когда наши провайдеры называют другие ресурсы (среди других простых логических проблем). Например:
action :run do
helper = Helper.new
template '/etc/hosts' do
source 'hosts.erb'
variables ({
"host" => @new_resource.host,
"ip_address" => node['ipaddress']
})
only_if { helper.update_hosts }
end
service 'httpd' do
action :restart
end
end
(это не реальный код, просто тривиальный пример)
То, что мы хотели бы сделать, это проверить этот провайдер в изоляции, чтобы проверить наличие логических ошибок. ChefSpec имеет возможность вступать в LWRP, но похоже, что это заставило бы нас поместить LWRP в рецепт, а многие из наших поваренных книг - это в основном библиотеки LWRP без рецептов. Мы также хотели бы сохранить чистое разделение в наших тестах, поэтому очевидно, какой компонент вышел из строя, посмотрев имя файла.
Кроме того, было бы неплохо, если бы тест автоматически потерпел неудачу, если в определении LWRP имеются синтаксические ошибки. Например:
action :run do
template '/etc/hosts/' do
source_whoops 'hosts.erb'
action :whoops
end
end
Было бы очень хорошо, если приведенное выше утверждение может вызвать сбой при проверке в связи с именем атрибута определяется неправильно, и имя действия не существует (так же, как ChefSpec).
Единственное решение, с которым я столкнулся, состоит в том, чтобы создать «тестовую кулинарию» - отдельную кулинарную книгу, которая определяет каждый LWRP 1: 1 с помощью одного рецепта, поэтому ChefSpec может войти в него таким образом. Это похоже на разумное, но не идеальное решение.
Да. Это именно то, что я сказал :) – sethvargo