在 Ruby 中,*
用于表示文件的名称。
例如,/home/user/*.rb
将返回所有以.rb
. 我想在 Chef InSpec 中做类似的事情。
例如:
describe file ('home/user/*') do
it {should_not exist }
end
它应该给我目录中的所有文件,/home/user
并检查该目录中是否存在文件。换句话说,我想在 Chef 中检查这个目录是否为空。
我怎样才能做到这一点?
在 Ruby 中,*
用于表示文件的名称。
例如,/home/user/*.rb
将返回所有以.rb
. 我想在 Chef InSpec 中做类似的事情。
例如:
describe file ('home/user/*') do
it {should_not exist }
end
它应该给我目录中的所有文件,/home/user
并检查该目录中是否存在文件。换句话说,我想在 Chef 中检查这个目录是否为空。
我怎样才能做到这一点?
*
for globs 主要是一个 shell 特性,正如你所料,file
资源不支持它们。改用command
资源:
describe command('ls /home/user') do
its(:stdout) { is_expected.to eq "\n" }
end
这是测试目录是否存在的另一种方法,如果存在,它使用 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"