1

在 Ruby 中,*用于表示文件的名称。

例如,/home/user/*.rb将返回所有以.rb. 我想在 Chef InSpec 中做类似的事情。

例如:

describe file ('home/user/*') do
  it {should_not exist }
end

它应该给我目录中的所有文件,/home/user并检查该目录中是否存在文件。换句话说,我想在 Chef 中检查这个目录是否为空。

我怎样才能做到这一点?

4

2 回答 2

2

*for globs 主要是一个 shell 特性,正如你所料,file资源不支持它们。改用command资源:

describe command('ls /home/user') do
  its(:stdout) { is_expected.to eq "\n" }
end
于 2016-08-03T17:40:46.577 回答
1

这是测试目录是否存在的另一种方法,如果存在,它使用 Ruby 来测试其中的文件。它还使用expect允许自定义错误消息的语法。

control 'Test for an empty dir' do
  describe directory('/hey') do
    it 'This directory should exist and be a directory.' do
      expect(subject).to(exist)
      expect(subject).to(be_directory)
    end
  end
  if (File.exist?('/hey'))
    Array(Dir["/hey/*"]).each do |bad_file|
      describe bad_file do
        it 'This file should not be here.' do
          expect(bad_file).to(be_nil)
        end
      end
    end
  end
end

如果存在文件,则生成的错误消息会提供信息:

  ×  Test for an empty dir: Directory /hey (2 failed)
     ✔  Directory /hey This directory should exist and be a directory.
     ×  /hey/test2.png This file should not be here.
     expected: nil
          got: "/hey/test2.png"
     ×  /hey/test.png This file should not be here.
     expected: nil
          got: "/hey/test.png"
于 2018-09-05T16:29:39.703 回答