Контекст:
У меня есть шаблон марионетки, который обращается к подкомпоненту count
факта processors
при его отображении. Этот факт есть у всех моих клиентов.
Вариант использования этого факта находится в строке шаблона, которая выполняет над ним десятичную математику, например: MyConfigVar=<%= 0.9 * @processors['count'] %>
в каком-то .erb
файле.
Я бы хотел:
- Получите мой шаблонный код, развернутый на производственных узлах.
- Напишите надежные модульные тесты для моих шаблонов, чтобы я мог быть уверен, что они будут отображаться правильно, учитывая различные разумные значения факта.
Что я пробовал:
Сначала я попробовал сигилы: <%= 0.9 * @processors[:count] %>
. Если я с помощью rspec-puppet издевался над чем-то вроде facts = { :processors => { :count => 10 } }
, все мои тесты проходили. Приложение манифеста не работало; у него была ошибка "невозможно умножить nil
". Сигилы, видимо, закончились.
Затем я попробовал с тягучими клавишами: <%= 0.9 * @processors['count'] %>
. Мои тесты с сигилом (facts = { :processors => { :count => 10 } }
) не были приняты, но мое значение было правильно найдено и умножено на facts = { :processors => { 'count' => 10 } }
. Все тесты потом прошли. Однако приложение манифеста завершилось с ошибкой Can't coerce String into Int
.
Затем я попытался использовать строковые значения. Шаблон все еще читал <%= 0.9 * @processors['count'].to_i %>
, и я тестировал как строковые, так и целые значения, например.
let(:facts) { :processors => { 'count' => '10' } }
# tests with string value
let(:facts) { :processors => { 'count' => 10 } }
# tests with integer value
Тесты все прошли, но приложение манифеста выдало 0.0
за значение факта.
Вопросы:
Два основных вопроса:
- Как я могу надежно заставить встроенную десятичную математику работать с этим (или любым) фактом?
- Как я могу надежно выполнить модульное тестирование, используя
rspec-puppet
или подобное, фактически имитируя значения с репрезентативными для производства типами?