У меня возникла проблема с тестированием некоторой ветреной логики json.erb. Ниже Еврорадио шаблон создает нужный файл в формате JSON:ruby, rspec и json.erb: модульное тестирование шаблона JSON
fig1:
"api": {
<% unless @GLANCE_IMAGE_API_WORKERS_NUM.nil? %>
"workers": <%= @GLANCE_IMAGE_API_WORKERS_NUM %>
<% if @GLANCE_BACKEND == 'ceph' %>
<% unless @GLANCE_IMAGE_API_WORKERS_NUM.to_s.empty? %>,<% end %>
"default_store": "rbd"
<% end %>
<% if [email protected]_CACHE_MAX_SIZE.to_s.empty? %>
<% unless @GLANCE_IMAGE_API_WORKERS_NUM.to_s.empty? && @GLANCE_BACKEND != 'ceph' %>,<% end %>
"cache" : {
"image_cache_max_size": <%= @IMAGE_CACHE_MAX_SIZE %>
}
<% end %>
Чтобы построить JSON он добавляет отставая запятые, если и когда они необходимы. Например, если glance_backend установлен в «Ceph», запятой требуется после glance.image.api_workers
, чтобы на следующую запись и сделать правильный JSON - пример:
Рис 2.
"api": {
"workers": 8,
"cache": {
"image_cache_max_size": 10000000000
}
},
Пытаюсь чтобы проверить все возможные сценарии для логики на рис 1. Я считаю, что они будут что-то вроде этого (псевдо-код):
если
image_cache_max_size != empty && glance_backend == 'ceph' && glance_image_api_workers == "not_empty"
, добавьте запятую после ввода default_store, чтобы позволить следующему пункту;если
image_cache_max_size != empty && glance_backend == 'ceph' && glance_image_api_workers == ""
, no trailing comma;если
image_cache_max_size != empty && glance_backend == 'not_ceph' && glance_image_api_workers == "not_empty"
, no trailing comma;если
image_cache_max_size != empty && glance_backend == 'ceph' && glance_image_api_workers == ""
, нет trailing запятая.
До сих пор моя RSpec логика выглядит следующим образом - fig3:
context 'comma appended to "glance.api.workers" in correct circumstances' do
before do
data_bag['IMAGE_CACHE_MAX_SIZE'] = 10000
data_bag['GLUSTER_BACKEND'] = 'ceph'
data_bag['GLUSTER_IMAGE_API_WORKERS'] = 'not_empty'
end
it 'sets default_store attributes' do
expect(override_attr['openstack']['image']['api']['workers'])
.to include(",")
end
before do
data_bag['IMAGE_CACHE_MAX_SIZE'] = 10000
data_bag['GLUSTER_BACKEND'] = 'local'
data_bag['GLUSTER_IMAGE_API_WORKERS'] = ''
end
it 'sets default_store attributes' do
expect(override_attr['openstack']['image']['api']['workers'])
.to_not include(",")
end
before do
data_bag['IMAGE_CACHE_MAX_SIZE'] = 10000
data_bag['GLUSTER_BACKEND'] = 'local'
data_bag['GLUSTER_IMAGE_API_WORKERS'] = 'not_empty'
end
it 'sets default_store attributes' do
expect(override_attr['openstack']['image']['api']['workers'])
.to_not include(",")
end
end
Это может быть совершенно неправильный способ пойти об этом. С нетерпением ждем некоторых предложений. Благодарю.
Спасибо за ваше предложение. Полезно знать. К сожалению, я застрял с логикой erb и вам нужно написать блок-тесты соответственно. Шеф-повар создает файл JSON с использованием файла ERB. Псевдо-код выше - это то, как я понимаю, что контроллер работает. – mickm