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