Backport array support for testAction()

This commit is contained in:
euromark 2014-12-23 13:42:21 +01:00
parent 6db96d5e41
commit 53f1390b7d
2 changed files with 17 additions and 2 deletions

View file

@ -299,6 +299,17 @@ class ControllerTestCaseTest extends CakeTestCase {
$this->assertEquals($expected, $results); $this->assertEquals($expected, $results);
} }
/**
* Test array URLs with testAction()
*
* @return void
*/
public function testTestActionArrayUrls() {
$Controller = $this->Case->generate('TestsApps');
$this->Case->testAction(array('controller' => 'tests_apps', 'action' => 'index'));
$this->assertInternalType('array', $this->Case->controller->viewVars);
}
/** /**
* Make sure testAction() can hit plugin controllers. * Make sure testAction() can hit plugin controllers.
* *

View file

@ -210,12 +210,12 @@ abstract class ControllerTestCase extends CakeTestCase {
* - `result` Get the return value of the controller action. Useful * - `result` Get the return value of the controller action. Useful
* for testing requestAction methods. * for testing requestAction methods.
* *
* @param string $url The url to test * @param string|array $url The url to test
* @param array $options See options * @param array $options See options
* @return mixed The specified return type. * @return mixed The specified return type.
* @triggers ControllerTestCase $Dispatch, array('request' => $request) * @triggers ControllerTestCase $Dispatch, array('request' => $request)
*/ */
protected function _testAction($url = '', $options = array()) { protected function _testAction($url, $options = array()) {
$this->vars = $this->result = $this->view = $this->contents = $this->headers = null; $this->vars = $this->result = $this->view = $this->contents = $this->headers = null;
$options += array( $options += array(
@ -224,6 +224,10 @@ abstract class ControllerTestCase extends CakeTestCase {
'return' => 'result' 'return' => 'result'
); );
if (is_array($url)) {
$url = Router::url($url);
}
$restore = array('get' => $_GET, 'post' => $_POST); $restore = array('get' => $_GET, 'post' => $_POST);
$_SERVER['REQUEST_METHOD'] = strtoupper($options['method']); $_SERVER['REQUEST_METHOD'] = strtoupper($options['method']);