小编Flo*_*uer的帖子

在ChefSpec运行期间模拟文件

我创建了一个Chef资源,它"扩展"了chef的部署资源.基本思想是检查是否存在deploy/crontab类似于deploy/after_restart.rb要部署的源中的机制的文件,并从中创建cronjobs.

虽然这种机制应该可行(参见https://github.com/fh/easybib-cookbooks/blob/t/cron-tests/easybib/providers/deploy.rb#L11-L14),但我正在努力基于ChefSpec的测试.我目前正在尝试使用FakeFS- 但是当我在Chef运行之前模拟Filesystem时,运行失败,因为没有找到cookbook,因为它们不存在于模拟文件系统中.如果我不deploy/crontab这样做,显然没有找到模拟文件,因此提供者不会做任何事情.我目前的方法是在chef_run FakeFS.activate!之前直接触发runner.converge(described_recipe).

我很想听听一些建议如何在这里进行正确的测试:是否有可能只在部署资源运行之前直接启用FakeFS,或者仅部分模拟文件系统?

rspec chef-infra chefspec

5
推荐指数
2
解决办法
4045
查看次数

使用splat参数从多维哈希中获取

我无法想出一个很好的方法来访问splat运算符中提供的键名称的多维哈希 - 任何建议?

示例:我喜欢哈希

{
  'key' => 'value',
  'some' => {
     'other' => {
         'key' => 'othervalue'
     }
  }
}
Run Code Online (Sandbox Code Playgroud)

和一个功能定义 def foo(*args)

我想回到foo('key') valuefoo('some','other','key') othervalue.所有我能想到的都是相当长而丑陋的循环与很多nil?检查,并且我确定我错过了一个更好的红宝石方式来做这个好又短.任何提示都表示赞赏.

更新

使用Patrick下面的回复,我想到了

def foo(hash, *args) 
  keys.reduce(hash, :fetch)
end
Run Code Online (Sandbox Code Playgroud)

这是我期望的那样.谢谢!

ruby hash

3
推荐指数
1
解决办法
105
查看次数

标签 统计

chef-infra ×1

chefspec ×1

hash ×1

rspec ×1

ruby ×1