我正在尝试使用Dir[]
和/或使用以下内容来全局目录Dir.foreach
:
files = Dir["#{options[:dir]}/**/*"].reject { |file| File.directory?(file) }
puts files.map{|filename| filename.join("\n")
和:
def print_tree(dir = ".", nesting = 0)
Dir.foreach(dir) do |entry|
next if entry =~ /^\.{1,2}/ # Ignore ".", "..", or hidden files
puts "| " * nesting + "|-- #{entry}"
if File.stat(d = "#{dir}#{File::SEPARATOR}#{entry}").directory?
print_tree(d, nesting + 1)
end
end
end
我正在尝试用Cucumber 和 Aruba对此进行测试。这是我的内容listing_files.feature
:
When I run `poet ls`
Then the output should contain exactly:
"""
foo/bar/conf1
foo/conf2.disabled
"""
和:
Then the output should contain exactly:
"""
|-- foo
| |-- bar
| | |-- conf1
| |-- conf2.disabled
"""
在我的本地机器上进行测试(OSX)很好,但我在 Travis 上遇到了这个失败:
expected: "foo/bar/conf1\nfoo/conf2.disabled\n"
got: "foo/conf2.disabled\nfoo/bar/conf1\n" (using ==)
显然,返回结果的顺序在所有系统上都不相同。这是1.9.3 和 2.0的记录行为:
请注意,区分大小写取决于您的系统(因此忽略 File::FNM_CASEFOLD),返回结果的顺序也是如此。
这使得测试目录列表成为一场噩梦。我可以以某种方式强制命令吗?或者如果没有,是否有最佳实践来综合测试这样的事情?