mirror of
https://github.com/kamilwylegala/cakephp2-php8.git
synced 2024-11-15 03:18:26 +00:00
Remove controller reuse between testAction() calls.
Reusing controllers between various testAction calls would mean that calls that needed to render views, would break on the second call to testAction(). Controllers are rebuilt for each testAction() call now. Fixes #2142
This commit is contained in:
parent
b165acd926
commit
c5ca10ca69
4 changed files with 54 additions and 5 deletions
|
@ -259,6 +259,7 @@ class ControllerTestCaseTest extends CakeTestCase {
|
|||
$result = $this->Case->controller->response->body();
|
||||
$this->assertPattern('/This is the TestsAppsController index view/', $result);
|
||||
|
||||
$Controller = $this->Case->generate('TestsApps');
|
||||
$this->Case->testAction('/tests_apps/redirect_to');
|
||||
$results = $this->Case->headers;
|
||||
$expected = array(
|
||||
|
@ -341,7 +342,7 @@ class ControllerTestCaseTest extends CakeTestCase {
|
|||
$result = $this->Case->testAction('/tests_apps/set_action', array(
|
||||
'return' => 'view'
|
||||
));
|
||||
$this->assertEquals($result, 'This is the TestsAppsController index view');
|
||||
$this->assertEquals($result, 'This is the TestsAppsController index view string');
|
||||
|
||||
$result = $this->Case->testAction('/tests_apps/set_action', array(
|
||||
'return' => 'contents'
|
||||
|
@ -464,7 +465,7 @@ class ControllerTestCaseTest extends CakeTestCase {
|
|||
$result = $this->Case->testAction('/tests_apps/set_action', array(
|
||||
'return' => 'view'
|
||||
));
|
||||
$this->assertEquals($result, 'This is the TestsAppsController index view');
|
||||
$this->assertEquals($result, 'This is the TestsAppsController index view string');
|
||||
|
||||
$result = $this->Case->testAction('/tests_apps/set_action', array(
|
||||
'return' => 'contents'
|
||||
|
@ -474,4 +475,35 @@ class ControllerTestCaseTest extends CakeTestCase {
|
|||
$this->assertPattern('/<\/html>/', $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that controllers don't get reused.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testNoControllerReuse() {
|
||||
$result = $this->Case->testAction('/tests_apps/index', array(
|
||||
'data' => array('var' => 'first call'),
|
||||
'method' => 'get',
|
||||
'return' => 'contents',
|
||||
));
|
||||
$this->assertContains('<html', $result);
|
||||
$this->assertContains('This is the TestsAppsController index view', $result);
|
||||
$this->assertContains('first call', $result);
|
||||
$this->assertContains('</html>', $result);
|
||||
|
||||
$result = $this->Case->testAction('/tests_apps/index', array(
|
||||
'data' => array('var' => 'second call'),
|
||||
'method' => 'get',
|
||||
'return' => 'contents'
|
||||
));
|
||||
$this->assertContains('second call', $result);
|
||||
|
||||
$result = $this->Case->testAction('/tests_apps/index', array(
|
||||
'data' => array('var' => 'third call'),
|
||||
'method' => 'get',
|
||||
'return' => 'contents'
|
||||
));
|
||||
$this->assertContains('third call', $result);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -21,6 +21,11 @@ class TestsAppsController extends AppController {
|
|||
public $uses = array();
|
||||
|
||||
public function index() {
|
||||
$var = '';
|
||||
if (isset($this->request->query['var'])) {
|
||||
$var = $this->request->query['var'];
|
||||
}
|
||||
$this->set('var', $var);
|
||||
}
|
||||
|
||||
public function some_method() {
|
||||
|
|
|
@ -1 +1 @@
|
|||
This is the TestsAppsController index view
|
||||
This is the TestsAppsController index view <?php echo isset($var) ? $var : ''; ?>
|
||||
|
|
|
@ -156,6 +156,15 @@ abstract class ControllerTestCase extends CakeTestCase {
|
|||
*/
|
||||
public $headers = null;
|
||||
|
||||
/**
|
||||
* Flag for checking if the controller instance is dirty.
|
||||
* Once a test has been run on a controller it should be rebuilt
|
||||
* to clean up properties.
|
||||
*
|
||||
* @var boolean
|
||||
*/
|
||||
private $__dirtyController = false;
|
||||
|
||||
/**
|
||||
* Used to enable calling ControllerTestCase::testAction() without the testing
|
||||
* framework thinking that it's a test case
|
||||
|
@ -217,9 +226,10 @@ abstract class ControllerTestCase extends CakeTestCase {
|
|||
$this->headers = Router::currentRoute()->response->header();
|
||||
return;
|
||||
}
|
||||
if ($this->controller !== null && Inflector::camelize($request->params['controller']) !== $this->controller->name) {
|
||||
if ($this->__dirtyController) {
|
||||
$this->controller = null;
|
||||
}
|
||||
|
||||
$plugin = empty($request->params['plugin']) ? '' : Inflector::camelize($request->params['plugin']) . '.';
|
||||
if ($this->controller === null && $this->autoMock) {
|
||||
$this->generate(Inflector::camelize($plugin . $request->params['controller']));
|
||||
|
@ -241,6 +251,7 @@ abstract class ControllerTestCase extends CakeTestCase {
|
|||
}
|
||||
$this->contents = $this->controller->response->body();
|
||||
}
|
||||
$this->__dirtyController = true;
|
||||
$this->headers = $Dispatch->response->header();
|
||||
return $this->{$options['return']};
|
||||
}
|
||||
|
@ -324,12 +335,13 @@ abstract class ControllerTestCase extends CakeTestCase {
|
|||
throw new MissingComponentException(array(
|
||||
'class' => $componentClass
|
||||
));
|
||||
}
|
||||
}
|
||||
$_component = $this->getMock($componentClass, $methods, array(), '', false);
|
||||
$_controller->Components->set($name, $_component);
|
||||
}
|
||||
|
||||
$_controller->constructClasses();
|
||||
$this->__dirtyController = false;
|
||||
|
||||
$this->controller = $_controller;
|
||||
return $this->controller;
|
||||
|
|
Loading…
Reference in a new issue