You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 06:09:03