如何在重构环境/角色/节点期间使用ChefSpec

时间:2014-01-27 14:02:05

标签: chef chefspec

我有一个需要一些清理的厨师回购。配置数据分散在节点,环境和角色文件夹中的文件中。

我的想法是在重组数据期间使用ChefSpec来测试回归。由于ChefSpec似乎只支持角色,我如何在ChefSpec测试中使用现有节点/环境?

2 个答案:

答案 0 :(得分:2)

大多数Chef工具都适用于单个食谱。您可以在“单片Chef repo”模式中使用ChefSpec。 ChefSpec执行have support for mocking Environmentsroles

当您编写ChefSpec测试(通常称为“示例”)时,它们针对的是单个食谱,而不是角色或环境。如果您为所有烹饪书编写了ChefSpec示例,那么您可以安全地执行此重构,在每次运行时运行测试。但是没有办法针对整个Chef存储库编写测试。

来源:

  • 我维护它并编写了当前版本

答案 1 :(得分: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的速度,我不想在所有必要的重组期间测试回归!