2014-01-27 25 views
3

我有一個需要一些清理的Chef repo。配置數據分散在節點,環境和角色文件夾中的文件中。如何在重構環境/角色/節點期間使用ChefSpec

我的想法是使用ChefSpec在重構數據期間測試迴歸。由於只有ChefSpec直接支持角色,我如何在ChefSpec測試中使用現有節點/環境?

+0

它看起來像你回答你自己的問題。你能否標記答案是正確的? – sethvargo

回答

2

回答自己,以防萬一別人可能會發現它有用:

我結束了類似的例子這:

it 'renders config file with proper data on node ABC in environment XYZ' do 
    runner = ChefSpec::Runner.new 

    node_attr = JSON.parse(File.open('nodes/ABC.json')) 
    runner.node.consume_attributes(node_attr) 

    env_attr = JSON.parse(File.open('environments/XYZ.json')) 
    env = Chef::Environment.json_create(env_attr) 

    runner.node.stub(:chef_environment).and_return('XYZ') 
    Chef::Environment.stub(:load).and_return(env) 

    runner.converge('cookbook::recipe') 

    expect(runner).to render_file('/etc/cookbook.cfg').with_content('some data from ABC.json') 
end 

這與「單聲道在我們廚師採用的早期階段,我使用的是「廚師回憶」模式,事實上我們正在使用廚師獨奏,但是嘗試與廚師回購兼容的文件夾結構。

此外,我不想在沒有ChefSpec的速度的情況下進行所有必要重組期間的迴歸測試!

2

大多數廚師工具都是爲了與單一食譜一起工作而設計的。您可以使用ChefSpec的「單塊廚師回購」模式。 ChefSpec做have support for mocking Environmentsroles

當您編寫ChefSpec測試(通常稱爲「示例」)時,它們是針對單一的烹飪書而不是一個角色或環境。如果您爲所有食譜書寫了ChefSpec示例,那麼您可以安全地執行此重構,在每次運行中運行測試。但是沒有辦法針對您的整個Chef存儲庫編寫測試。

來源:

  • 我維護它,並寫了當前版本
+0

我不完全理解'沒有辦法針對你的整個Chef倉庫編寫測試。假設我有兩本共享資源使用常見模式的食譜。我想把這個分解到第二個食譜中的一個定義中,這個定義被兩個引用。你會說,這超出了chefspec測試的範圍嗎? (我不希望,因爲它的速度非常棒!) –