Florian Herlings, freier Webentwickler aus Düsseldorf.

Symfony-Tests in einer Endlosschleife ausfĂŒhren

Gerade wenn man testgetrieben entwickelt (TDD) ist es praktisch, seine Test-Suite möglichst oft laufen zu lassen. Symfony bietet einem ĂŒber das Kommandozeilen-Tool die Möglichkeit, seine Tests mit einem einfachen Befehl symfony test:all auszufĂŒhren.

Aber nach jeder Änderung immer wieder das Kommandozeilen-Fenster auszuwĂ€hlen, und die Tests von Hand anzuschmeißen ist beizeiten etwas umstĂ€ndlich.

Ein „Continuous Integration“-Server ist sicherlich die optimale Lösung, aber wer es etwas kleiner mag, kann die Tests auch direkt in Symfony in einer Endlosschleife laufen lassen. Sicherlich ließe sich dies noch deutlich schicker und sauberer schreiben, aber wer eine schnelle Lösung braucht, kann diesen Task sicherlich verwenden.

"test:loop"-Task anlegen

ZunÀchst legt man einen neuen Task an:

symfony generate:task testLoop

Dann öffnet man die neu angelegte Task-Datei ./lib/task/testLoopTask.class.php und trÀgt folgenden Code dort ein:

 class testLoopTask extends sfBaseTask
 { 
   protected function configure() 
   { 
     $this->namespace        = 'test';
     $this->name             = 'loop';
     $this->briefDescription = 'Runs test:all in a loop.';
     $this->detailedDescription = <<<EOF
 The test:loop task runs all tests (test:all) in a loop with 5 seconds delay between each run.
 Call it with:
 
   [php symfony test:loop|INFO]
 
 Kill it by pressing CMD+C.
 EOF;
   } 
 
   protected function execute($arguments = array(), $options = array()) 
   { 
     while(true)
     {      
       echo PHP_EOL.'Running all tests.'.PHP_EOL;
       system('php symfony test:all -t');
       echo "Waiting..";
       for($i=5; $i > 0; $i--) { echo ', '.$i; sleep(1); } 
     }
   } 
}

Den Task ausfĂŒhren

Die Endlosschleife lĂ€sst sich nun leicht ĂŒber das Symfony-Kommandozeilen-Tool ausfĂŒhren und mit der Tasten-Kombination Strg+C abbrechen.

symfony test:loop