windy json.erbロジックをテストする際に問題があります。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を構築するにはERB以下のテンプレートは、必要なJSONファイルを作成します。例えばglance_backendが「CEPH」に設定されている場合、コンマは次のエントリを可能にし、JSONを有効にするためにglance.image.api_workers
後に必要になる - 例:
図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 == ""
、末尾のコンマはありません。image_cache_max_size != empty && glance_backend == 'not_ceph' && glance_image_api_workers == "not_empty"
、末尾のコンマはありません。image_cache_max_size != empty && glance_backend == 'ceph' && glance_image_api_workers == ""
、末尾のコンマはありません。これは、このついて行くには完全に間違った方法かもしれ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
:Fig3 -
これまでのところ、私のRSpecのロジックは次のようになります。いくつかの提案を聞いて楽しみにしています。ありがとう。
ご意見ありがとうございます。知っておくと便利です。残念ながら、私はerbロジックに固執しており、それに応じて単体テストを書く必要があります。 ChefはERBファイルを使用してJSONファイルを作成します。上記の擬似コードは、コントローラがどのように動作するかを理解する方法です。 – mickm