2013-04-29 16 views
0

我正在學習用PHP單元測試和我下面就tutsplus的TDD會議:http://net.tutsplus.com/sessions/test-driven-php/測試的文件更新所有子類

我已成立了一個紅寶石watchr腳本來運行PHPUnit的單元測試每個文件的修改時間使用Susan Buck的腳本:https://gist.github.com/susanBuck/4335092

我想更改ruby腳本,以便除了在更新文件時測試文件以外,還會測試從文件繼承的所有文件。我的名字我的文件,表示繼承(和組文件)作爲家長 .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 

圖書館在哪裏,測試和TestFileEnd是在文件的頂部定義的值。它也進行了更改,以便它可以檢測應用程序庫的子文件夾中的更改並加載相應的測試文件。

回答

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 

這可能不是cleaneast方式,但它應該工作。

第一行將所有相對路徑保存到Classes目錄中的文件的相對路徑,這些文件以子類中已更改的文件名開頭。 在地圖塊我使用正則表達式只獲取文件名,沒有任何文件夾名稱或.php擴展名。

希望這有助於你

+0

感謝您的幫助。它讓我到我需要去的地方:) – baiano 2013-05-01 17:30:14

相關問題