Pass Controller:$components config to mocked components

Otherwise there can be significant differences in behavior between using
an unmodifiedcomponent in testAction and using a mock as the config will not be
propogated from the controller
This commit is contained in:
AD7six 2013-08-19 09:46:07 +00:00
parent 0f2d59d987
commit 09cf69c452
3 changed files with 37 additions and 1 deletions

View file

@ -210,6 +210,28 @@ class ControllerTestCaseTest extends CakeTestCase {
$this->assertEquals('written!', $Posts->Auth->Session->write('something'));
}
/**
* testGenerateWithComponentConfig
*/
public function testGenerateWithComponentConfig() {
$Tests = $this->Case->generate('TestConfigs', array(
));
$expected = array('some' => 'config');
$settings = array_intersect_key($Tests->RequestHandler->settings, array('some' => 'foo'));
$this->assertSame($expected, $settings, 'A mocked component should have the same config as an unmocked component');
$Tests = $this->Case->generate('TestConfigs', array(
'components' => array(
'RequestHandler' => array('isPut')
)
));
$expected = array('some' => 'config');
$settings = array_intersect_key($Tests->RequestHandler->settings, array('some' => 'foo'));
$this->assertSame($expected, $settings, 'A mocked component should have the same config as an unmocked component');
}
/**
* Tests ControllerTestCase::generate() using classes from plugins
*/

View file

@ -0,0 +1,13 @@
<?php
App::uses('CakeErrorController', 'Controller');
class TestConfigsController extends CakeErrorController {
public $components = array(
'RequestHandler' => array(
'some' => 'config'
)
);
}

View file

@ -364,7 +364,8 @@ abstract class ControllerTestCase extends CakeTestCase {
'class' => $componentClass
));
}
$componentObj = $this->getMock($componentClass, $methods, array($controllerObj->Components));
$config = isset($controllerObj->components[$component]) ? $controllerObj->components[$component] : array();
$componentObj = $this->getMock($componentClass, $methods, array($controllerObj->Components, $config));
$controllerObj->Components->set($name, $componentObj);
$controllerObj->Components->enable($name);
}