-- Peter Wansch <[EMAIL PROTECTED]> wrote
(on Sunday, 31 August 2008, 04:19 PM -0700):
> I wrote the following unit test case:
>
> class Ggv_LoginTest extends Zend_Test_PHPUnit_ControllerTestCase
> {
> public $bootstrap = '/Library/WebServer/Documents/GGV/www/index.php';
>
> public function testCallWithoutActionShouldPullFromIndexAction()
> {
> $this->dispatch('/');
> $this->assertResponseCode(200);
> }
>
> public function testValidLoginShouldGoToIndexPage()
> {
> $this->request->setMethod('POST')
> ->setPost(array(
> 'user_name' => TESTS_LOGIN_NAME,
> 'user_password' => TESTS_LOGIN_PASSWORD
> ));
> $this->dispatch('/GGV/www/user/login/');
> $this->assertResponseCode(200);
> }
> }
>
> The first test case that dispatches to '/' works. The second test case that
> dispatches to throws Zend_Controller_Exception: No default module defined
> for this application. I use the same index.php bootstrap file for running
> the application and testing the application. Here is a relevant excerpt:
>
> defined('GGV_DISPATCH_FRONT_CONTROLLER') or
> define('GGV_DISPATCH_FRONT_CONTROLLER', true);
>
> // Set the session into the registry
> Zend_Registry::set('session', $session);
>
> // Set up the front controller and dispatch
> $front = Zend_Controller_Front::getInstance();
> $front->registerPlugin(new LoggerPlugin());
> $front->throwExceptions(false);
> $front->setControllerDirectory(GGV_PATH_ROOT .
> '/application/controllers');
> $front->setBaseUrl($config->www->baseurl);
> if (GGV_DISPATCH_FRONT_CONTROLLER)
> {
> $front->dispatch();
> }
>
> the only difference is that in my test case I require_once a test
> configuration PHP file that defines GGV_DISPATCH_FRONT_CONTROLLER to false
> as per the documentation the bootstrap file must not dispatch the front
> controller. Unlike all the samples given, I don't use a Bootstrap class or
> callback in my testcase. It appears that Zend_Test does not use the $front
> controller I setup in my index.php but creates it's own which isn't
> initialized and throws the error.
Well, Zend_Controller_Front is a singleton, so any instance of it is
going to be the same instance, regardless of where it is executed.
> I have also experimented with adding a setUp
>
> public function setUp()
> {
> // Execute any startup code here
I would define GGV_DISPATCH_FRONT_CONTROLLER right here, before calling
parent::setUp() to ensure that you don't accidently dispatch the
controller during bootstrapping.
> parent::setUp();
> }
>
> method into my testcase and trying to set the $this->frontController=$front
> but the global variable that gets set in index.php is not available. What am
> I doing wrong here? Any help is appreciated.
--
Matthew Weier O'Phinney
Software Architect | [EMAIL PROTECTED]
Zend Framework | http://framework.zend.com/