我正在学习使用 PHP 进行单元测试,并且正在关注 tutsplus 上的 TDD 会话:http: //net.tutsplus.com/sessions/test-driven-php/
每次使用 Susan Buck 的脚本修改文件时,我都设置了一个 ruby watchr 脚本来运行 PHPUnit 单元测试:https ://gist.github.com/susanBuck/4335092
我想更改 ruby 脚本,以便除了在更新文件时测试文件之外,它还将测试从它继承的所有文件。我将我的文件命名为Parent .php、Parent.Child .php 和Parent.Child.GrandChild .php 等表示继承(以及对文件进行分组),因此 watchr 脚本可以只按名称搜索。我只是不知道该怎么做。
我想改:
watch("Classes/(.*).php") do |match|
run_test %{Tests/#{match[1]}_test.php}
end
类似于:
watch("Classes/(.*).php") do |match|
files = get all classes that inherit from {match[1]} /\b{match[1]}\.(.*)\.php/i
files.each do |file|
run_test %{Tests/{file}_test.php}
end
end
如何在目录中搜索文件名?或者,有没有更简单/更好的方法来实现这一点?
谢谢
编辑
这就是我最终的结果:
watch("#{Library}/(.*/)?(.*).php") do |match|
file_moded(match[1], match[2])
end
def file_moded(path, file)
subclasses = Dir["#{Library}/#{path}#{file}*.php"]
p subclasses
subclasses.each do |file|
test_file = Tests + file.tap{|s| s.slice!(".php")}.tap{|s| s.slice!("#{Library}")} + TestFileEnd
run_test test_file
end
end
其中 Library、Tests 和 TestFileEnd 是在文件顶部定义的值。它也进行了更改,以便它将检测应用程序库的子文件夹中的更改并加载适当的测试文件。