我正在学习使用PHP进行单元测试,并且正在关注tutsplus上的TDD会话:http://net.tutsplus.com/sessions/test-driven-php/
我已经设置了一个ruby watchr脚本,每次使用Susan Buck的脚本修改文件时运行PHPUnit单元测试:https://gist.github.com/susanBuck/4335092
我想更改ruby脚本,以便除了在更新文件时对其进行测试,它还将测试从中继承的所有文件。我将我的文件命名为继承(以及分组文件)为 Parent .php, Parent.Child .php和 Parent.Child.GrandChild .php等,因此监视器脚本只能按名称搜索。我根本不知道该怎么做。
我想改变:
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是在文件顶部定义的值。它也进行了更改,以便检测应用程序库中子文件夹的更改并加载相应的测试文件。
答案 0 :(得分:1)
我不完全确定,但我认为这会奏效:
watch("Classes/(.*).php") do |match|
subclasses = Dir["Classes/#{match[1]}*.php"]
filenames = subclasses.map do |file|
file.match(/Classes\/(.*)\.php/)[1]
end
filenames.each do |file|
run_test "Tests/#{file}_test.php"
end
end
这可能不是清洁方式,但应该有效。
第一行保存Classes目录中文件的所有相对路径,从子类中更改的文件名开始。 在地图块中我使用正则表达式只获取文件名,没有任何文件夹名称或.php扩展名。
希望这有助于你