-
-
Save maartenba/4529548 to your computer and use it in GitHub Desktop.
| <?php | |
| // Clean argument values | |
| $phpStormRunner = null; | |
| $cleanedArgv = array(); | |
| foreach ($_SERVER['argv'] as $key => $value) { | |
| if (strpos($value, 'ide-phpunit.php') === false) { | |
| $cleanedArgv[] = $value; | |
| } else { | |
| $phpStormRunner = $value; | |
| } | |
| } | |
| $_SERVER['argv'] = $cleanedArgv; | |
| // Cleanup PhpStorm runner | |
| if (is_null($phpStormRunner)) { | |
| die('Not running in PhpStorm'); | |
| } | |
| $phpStormRunnerContents = file_get_contents($phpStormRunner); | |
| $phpStormRunnerContents = str_replace('IDE_PHPUnit_TextUI_Command::main', 'IDE_Cake_PHPUnit_TextUI_Command::main', $phpStormRunnerContents); | |
| $phpStormRunnerContents = str_replace('IDE_Cake_PHPUnit_TextUI_Command::main()', '//IDE_Cake_PHPUnit_TextUI_Command::main()', $phpStormRunnerContents); | |
| file_put_contents($phpStormRunner, $phpStormRunnerContents); | |
| // Include PhpStorm runner | |
| include($phpStormRunner); | |
| // Let's bake some CakePHP | |
| if (!defined('DS')) { | |
| define('DS', DIRECTORY_SEPARATOR); | |
| } | |
| if (!defined('ROOT')) { | |
| define('ROOT', dirname(__FILE__)); | |
| } | |
| if (!defined('APP_DIR')) { | |
| define('APP_DIR', 'app'); | |
| } | |
| if (!defined('WEBROOT_DIR')) { | |
| define('WEBROOT_DIR', APP_DIR . DS . 'webroot'); | |
| } | |
| if (!defined('WWW_ROOT')) { | |
| define('WWW_ROOT', WEBROOT_DIR . DS); | |
| } | |
| if (!defined('CAKE_CORE_INCLUDE_PATH')) { | |
| if (function_exists('ini_set')) { | |
| ini_set('include_path', ROOT . DS . 'lib' . PATH_SEPARATOR . ini_get('include_path')); | |
| } | |
| if (!include ('Cake' . DS . 'bootstrap.php')) { | |
| $failed = true; | |
| } | |
| } else { | |
| if (!include (CAKE_CORE_INCLUDE_PATH . DS . 'Cake' . DS . 'bootstrap.php')) { | |
| $failed = true; | |
| } | |
| } | |
| if (!empty($failed)) { | |
| trigger_error("CakePHP core could not be found. Check the value of CAKE_CORE_INCLUDE_PATH in APP/webroot/index.php. It should point to the directory containing your " . DS . "cake core directory and your " . DS . "vendors root directory.", E_USER_ERROR); | |
| } | |
| if (Configure::read('debug') < 1) { | |
| die(__d('cake_dev', 'Debug setting does not allow access to this url.')); | |
| } | |
| // Do some reconfiguration | |
| Configure::write('Error', array()); | |
| Configure::write('Exception', array()); | |
| // Bootstrap CakePHP | |
| require_once CAKE . 'TestSuite' . DS . 'CakeTestSuiteDispatcher.php'; | |
| require_once CAKE . 'TestSuite' . DS . 'CakeTestSuiteCommand.php'; | |
| // Define new runner | |
| class IDE_Cake_PHPUnit_TextUI_Command extends CakeTestSuiteCommand | |
| { | |
| public static function main($exit = TRUE) | |
| { | |
| // Parse CakePHP-specific test runner options | |
| // And remove CakePHP-specific test runner options from ARGV | |
| $cakePhpOptions = array('case' => 'AllTests'); | |
| $cleanedArgv = array(); | |
| foreach ($_SERVER['argv'] as $key => $value) { | |
| if (strpos($value, '--cake-') !== false) { | |
| $option = explode('=', $value); | |
| $cakePhpOptions[str_replace('--cake-', '', $option[0])] = isset($option[1]) ? $option[1] : 'true'; | |
| } else { | |
| $cleanedArgv[] = $value; | |
| } | |
| } | |
| // Run! | |
| $command = new IDE_Cake_PHPUnit_TextUI_Command('CakeTestLoader', $cakePhpOptions); | |
| $command->run($cleanedArgv, $exit); | |
| } | |
| protected function handleArguments(array $argv) | |
| { | |
| parent::handleArguments($argv); | |
| $this->arguments['listeners'][] = new IDE_PHPUnit_Framework_TestListener(); | |
| $this->arguments['printer'] = new IDE_PHPUnit_TextUI_ResultPrinter(); | |
| } | |
| } | |
| IDE_Cake_PHPUnit_TextUI_Command::main(); |
in PhpStorm 8.0.3 it works for me without that file
I am running PhpStorm 9.0.2 and the change suggested by tomas is required. Perhaps it has something to do with the version of CakePHP used...
Yes Tomas,
Run OK in PHPStrom 8, 9 and 10 + PHPUnit 3.7.38 + CakePHP 2.6.x
;-)
protected function handleArguments(array $argv)
{
parent::handleArguments($argv);
$printer = null;
if (isset($this->arguments['printer'])) {
$printer = $this->arguments['printer'];
}
$printer = new IDE_PHPUnit_TextUI_ResultPrinter($printer);
$this->arguments['printer'] = $printer;
$this->arguments['listeners'][] = new IDE_PHPUnit_Framework_TestListener($printer);
}Link Code Full add change and testing:
https://bitbucket.org/snippets/eom/bRqy6
Hi
There's a code currently I'm using in IntelliJ IDEA 15.0 with CakePHP2.7.
it can be using by TestRunner with Test Scope Class and Method option and Coverage report option.
https://github.com/kazuhiko-hotta/IntelliJCakePHPUnitTestAdaptor/blob/master/intellijadaptor.php
Used this solution to make a plugin https://github.com/xTNTx/CakeJetbrainsTest
How do I configure PHPStorm 2016.2 to work with this?
And would the setup be any different when using a Vagrant machine? I've read about the need to use a local interpreter when using this method -- but my project uses an interpreter on this Vagrant vm.
This script no longer works on cakephp 2017.2. Does anyone have a solution?
Hi,
if you are using PHPStorm 8.x, you must make some modifications into this file to make it working. You much change handleArguments(array $argv) to following