2015-10-19 139 views
2

我正在为我写的食谱编写ServerSpec测试过程。测试需要节点属性来通过厨房断言各种事物。厨师 - ServerSpec - 访问节点属性

幸运的是,解释如何做到这一点这里的指南: http://jakshi.com/blog/2014/05/12/accessing-chef-attributes-in-serverspec-tests/

我遇到的问题是,这不起作用:

attrs = attrs.deep_merge(node.override_attrs) unless node.override_attrs.empty? 

但这个工程:

attrs = attrs.deep_merge(node.attributes.combined_override) unless node.attributes.combined_override.empty? 

我的设置与博客中描述的完全相同。由于缺乏红宝石,浏览code没有帮助。厨师客户端版本是11.14.6和测试厨房版本是1.3.1

有人可以帮忙吗?有没有其他人有这个问题?谢谢。

更新:这里是我为了模拟这个而创建的虚拟食谱的所有属性。

cb-under-test/recipes/default.rb 
<Nothing> 


cb-under-test/test/fixtures/cookbooks/fake/attributes/default.rb 
force_override['important_dir'] = 'test_recipe_force_override' 


../env/dummy-env.json 
{ 
    "name": "dummy-env", 
    "description": "Dummy Env", 
    "cookbook_versions": { 
    }, 
    "json_class": "Chef::Environment", 
    "chef_type": "environment", 
    "override_attributes": { 
    "important_dir": "env_override" 
    } 
} 
+0

添加您的测试食谱的属性文件,我们无法猜测您在哪个级别设置它们... – Tensibai

+0

这些属性来自几个地方,包括环境。我的测试食谱中没有任何属性。 – dvlpr

+0

无论如何,如果没有提取物,我们无法猜测您的属性定义在哪个级别(默认,正常,覆盖,其他?) – Tensibai

回答

3

根据the code没有override_attrs方法。

在这里,您将拥有node.override下的食谱属性和node.env_override中的环境属性,node.combined_override为您提供深度合并后的结果属性。

的博客文章是很老,你应该更好地利用attrs = node.merged_attributes写的JSON文件,并从食谱,角色和环境得到所产生的属性,使用merged_attributes应避免ohai属性,保持JSON尺寸低。

+0

我正在使用一个test_helper配方,它将节点属性存储在一个文件中,因此ServerSpec可以对它们进行测试,并发现环境变量根本没有被合并。使用'node.env_override'为我解决了它。谢谢。 –