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

How to stub two level of json data bag in chef spec

我正在尝试为 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'
  }
)

获取未定义方法的错误

NoMethodError

nil:NilClass

的未定义方法“[]”

食谱跟踪:

我的数据包结构是

{ "id": "databagname", "cardetails": { "car_model": "ABC", "car_engine": "XYZ", "car_type": "DEE", } }

当我使用以下语法进行存根时问题得到解决

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

一般来说,如果可以的话,您不应该使用它 API。如果需要,正常的 data_bag_item API 会自动解密,然后您可以在 ChefSpec 中使用正常的存根助手。