ChefSpec中如何mock node.chef_environment节点属性?
问题原因
node.chef_environment 是 Chef 内置的特殊运行时属性,不属于普通的节点默认/覆盖属性层级,因此通过 default_attributes 设置不会生效,可通过以下两种方式实现mock:
方案1:初始化Runner时指定环境(推荐)
ChefSpec 的 SoloRunner/ServerRunner 初始化参数原生支持直接指定运行环境,是最规范的实现方式:
describe "my_test" do context "create template file" do let(:chef_run) do ChefSpec::SoloRunner.new(environment: 'my_env') do |node| # 其他需要自定义的节点属性可在此处设置 end.converge(described_recipe) end it { is_expected.to render_file('my_script.sh').with_content('env=my_env')} end end
方案2:动态修改node对象的环境属性
如果需要在测试过程中动态调整环境值,可以直接对实例化后的node对象赋值:
describe "my_test" do context "create template file" do let(:chef_run) do runner = ChefSpec::SoloRunner.new runner.node.chef_environment = 'my_env' runner.converge(described_recipe) end it { is_expected.to render_file('my_script.sh').with_content('env=my_env')} end end
内容的提问来源于stack exchange,提问作者user5580578
相关产品推荐
相关产品推荐

