Chef infra 使用ChefSpec测试Chef FileEdit的结果

Chef infra 使用ChefSpec测试Chef FileEdit的结果,chef-infra,Chef Infra,我正在尝试使用FileEdit在文件中插入一行,如果该行不存在: ruby_block "insert_line" do block do file = Chef::Util::FileEdit.new("/etc/environment") file.insert_line_if_no_match("/blah/", "blah") file.write_file end 结束 然后,我尝试使用chefspec测试这一点: it 'adds blah to the file' d

我正在尝试使用FileEdit在文件中插入一行,如果该行不存在:

ruby_block "insert_line" do
block do
  file = Chef::Util::FileEdit.new("/etc/environment")
  file.insert_line_if_no_match("/blah/", "blah")
  file.write_file
end
结束

然后,我尝试使用chefspec测试这一点:

it 'adds blah to the file' do
  expect(chef_run).to render_file('/etc/environment').with_content(/^blah$/)
end

测试失败,我怀疑这是因为
render\u file
不支持文件编辑。我的问题是是否有一个等价物?还是我做了什么蠢事?

我没有在ChefSpec中尝试过这一点,但我怀疑您在
render\u文件
没有连接到
Chef::Util::FileEdit
中是正确的。我会使用测试厨房和BATS将此检查转移到集成测试中。在尝试了一些不同的技术之后,我决定将我的大多数测试作为集成测试来编写。当我需要测试库代码时,我将其视为Ruby代码并直接进行RSpec测试。实际上,我现在很少编写ChefSpec测试。我发现它会导致非常快速的测试运行,但测试和cookbook之间会有很多重复。

render_file
目标
模板
文件
cookbook_file
根据ruby_块的资源甚至永远不会被评估。Chefspec不会在任何资源上运行该操作,它只会创建资源。@tejaycardon我不确定,但创建资源涉及调用提供程序load\u current\u资源,还是我误解了代码?@Tensibai我不确定load\u current\u资源被调用的位置,我一直无法找到它。但我不确定这与未被评估的ruby_块资源有什么关系。@TejayCardon抱歉,这是一个更一般的问题,没有真正的关系。我的错。