2015-10-19 138 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'爲我解決了它。謝謝。 –