Chef infra 如何在chef规范中存根两级json数据包

Chef infra 如何在chef规范中存根两级json数据包,chef-infra,chefspec,Chef Infra,Chefspec,我正试图为chef编写单元测试,并将加密数据包存根如下。 配方部分 variables(car_model: Chef::EncryptedDataBagItem.load('databagname', node.environment, key_name)['cardetails']['car_model']) 在下面的模式中做存根 Chef::EncryptedDataBagItem.stub(:load).with('databagname', 'test', 'somekey').an

我正试图为chef编写单元测试,并将加密数据包存根如下。 配方部分

variables(car_model: Chef::EncryptedDataBagItem.load('databagname', node.environment, key_name)['cardetails']['car_model'])
在下面的模式中做存根

Chef::EncryptedDataBagItem.stub(:load).with('databagname', 'test', 'somekey').and_return(
"cardetails": {
  'car_model' => 'abc'
  }
)
将错误获取为未定义的方法

命名者 nil:NilClass的未定义方法“[]”

食谱跟踪: 我的数据包结构是

{
“id”:“databagname”,
“卡片细节”:{
“汽车型号”:“ABC”,
“汽车发动机”:“XYZ”,
“车辆类型”:“DEE”,
}
}

当我使用下面的语法进行存根时,它得到了解决

Chef::EncryptedDataBagItem.stub(:load).with('databagname', 'test', 'somekey').and_return(
  "cardetails" => {'car_model' => 'abcasasasasas'}
  )

一般来说,如果可以的话,您不应该使用该API。如果需要,普通的
data\u bag\u项目
API会自动解密,然后您可以使用ChefSpec中的普通存根帮助程序