Ruby 在文件更新时测试所有子类

Ruby 在文件更新时测试所有子类,ruby,phpunit,watchr,Ruby,Phpunit,Watchr,我正在学习使用PHP进行单元测试,并在tutsplus上学习TDD课程: 我已经设置了一个ruby watchr脚本,以便在每次使用Susan Buck的脚本修改文件时运行PHPUnit单元测试: 我想更改ruby脚本,这样除了在更新文件时测试文件外,还可以测试从它继承的所有文件。我将我的文件命名为Parent.php、Parent.Child.php和Parent.Child.孙子.php等,以表示继承(并将文件分组),这样watchr脚本就可以按名称进行搜索。我只是不知道怎么做 我想改变一下

我正在学习使用PHP进行单元测试,并在tutsplus上学习TDD课程:

我已经设置了一个ruby watchr脚本,以便在每次使用Susan Buck的脚本修改文件时运行PHPUnit单元测试:

我想更改ruby脚本,这样除了在更新文件时测试文件外,还可以测试从它继承的所有文件。我将我的文件命名为Parent.php、Parent.Child.php和Parent.Child.孙子.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是在文件顶部定义的值。还对其进行了更改,以便它能够检测应用程序库子文件夹中的更改,并加载相应的测试文件。

我不完全确定,但我认为这会起作用:

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
这可能不是最干净的方式,但应该行得通

第一行保存类目录中文件的所有相对路径,从子类中更改的文件名开始。 在映射块中,我使用正则表达式只获取文件名,而不获取任何文件夹名或.php扩展名


希望这对您有所帮助

谢谢您的帮助。它把我带到了我需要去的地方:)