private function runBehat($steps) { $client = $this->getClient(); $file = tempnam(sys_get_temp_dir(), 'mailcatcher_'); unlink($file); $configFile = $file . '.config'; $outputFile = $file . '.output'; $file = $file . '.feature'; $content = "Feature: Test\n\n Scenario: Test\n " . implode("\n ", $steps) . "\n"; $config = json_encode(array('default' => array('context' => array('class' => 'Alex\\MailCatcher\\Test\\TestContext'), 'extensions' => array('Alex\\MailCatcher\\Behat\\MailCatcherExtension\\Extension' => array('url' => $client->getUrl(), 'purge_before_scenario' => false))))); try { $behat = new BehatApplication('DEV'); $behat->setAutoExit(false); $input = new ArgvInput(array('behat', '--format', 'progress', '--config', $configFile, '--out', $outputFile, $file)); $output = new NullOutput(); file_put_contents($file, $content); file_put_contents($configFile, $config); $result = $behat->run($input, $output); unlink($file); unlink($configFile); } catch (\Exception $exception) { unlink($file); unlink($file . '.config'); $this->fail($exception->getMessage()); } if ($result !== 0) { $this->fail('Should finished with status 0, got ' . $result); } }
/** * @param \Symfony\Component\Console\Input\InputInterface $input * @param \Symfony\Component\Console\Output\OutputInterface $output * @return int * @throws \Exception */ public function run(InputInterface $input = NULL, OutputInterface $output = NULL) { if (NULL === $output) { $output = new ConsoleOutput(); } try { return parent::run($input, $output); } catch (\Exception $e) { if ($output instanceof ConsoleOutputInterface) { $this->renderException($e, $output->getErrorOutput()); } else { $this->renderException($e, $output); } if ($file = Debugger::log($e, Debugger::ERROR)) { $output->writeln(sprintf('<error> (Tracy output was stored in %s) </error>', basename($file))); $output->writeln(''); if (Debugger::$browser) { exec(Debugger::$browser . ' ' . escapeshellarg($file)); } } return min((int) $e->getCode(), 255); } }
public function scenariosMeetAcceptanceCriteria($bundleName) { // //Les dossiers de logs sont crees s'ils n'existent pas // $dirFeatures = 'build/logs/features/' . $bundleName . '/'; if (!is_dir($dirFeatures)) { mkdir($dirFeatures, 0777, true); } // //BehatApplication et config // $app = new BehatApplication('DEV'); $app->setAutoExit(false); $format = 'junit,html'; $outputFileDefault = $dirFeatures . ',' . $dirFeatures . 'index.html'; $outputFileJavascript = $dirFeatures . ',' . $dirFeatures . 'javascript.html'; //PHPUnit lance avec l'option --verbose (-v) permettra d'afficher dans la console la sortie de Behat : if (in_array('--verbose', $_SERVER['argv']) || in_array('-v', $_SERVER['argv'])) { $format = 'pretty,' . $format; $outputFileDefault = ',' . $outputFileDefault; $outputFileJavascript = ',' . $outputFileJavascript; } // //Le profil Behat : default // $resultDefault = $app->run(new ArrayInput(array('--ansi' => null, '--format' => $format, '--out' => $outputFileDefault, 'features' => '@' . $bundleName)), new ConsoleOutput()); // //Le profil Behat : javascript ou javascript_jenkins // $profile = 'javascript'; //Si on detecte que les tests sont lances depuis Jenkins, on utilise le profil "javascript_jenkins" /* if (strpos(getcwd(), '/var/lib/jenkins/') !== false) { $profile = 'javascript_jenkins'; } */ $resultJavascript = $app->run(new ArrayInput(array('--ansi' => null, '--format' => $format, '--out' => $outputFileJavascript, '--profile' => $profile, 'features' => '@' . $bundleName)), new ConsoleOutput()); //Assertion $result = $resultDefault + $resultJavascript; $this->assertEquals(0, $result, $result . " scénario(s) Behat échoue(nt) pour '" . $bundleName . "', plus d'info disponible dans '" . $dirFeatures . "' !"); }