语境:
我有一个 puppet 模板,它在渲染时处理事实的count
子组件。processors
这个事实存在于我所有的客户身上。
该事实的用例是在对其执行十进制数学的模板行中,例如:MyConfigVar=<%= 0.9 * @processors['count'] %>
在某个.erb
文件中。
我想要:
- 将我的模板化代码部署到生产主机。
- 为我的模板编写健壮的单元测试,这样我就可以确定它会正确呈现,给定各种合理的事实值。
我试过的:
首先,我尝试使用印记:<%= 0.9 * @processors[:count] %>
. 如果我用 rspec-puppet 模拟类似的东西facts = { :processors => { :count => 10 } }
,我的测试都通过了。清单应用程序不起作用;它有一个“不能相乘nil
”的错误。Sigils显然已经出来了。
然后,我尝试使用字符串键:<%= 0.9 * @processors['count'] %>
. 我使用 sigil ( 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
对生产代表类型进行单元测试、使用或类似的模拟值?