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.
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); } } } }
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