user1173169
user1173169

Reputation:

PHPUnit displays Maximum function nesting level of '100' reached, aborting

i'm new to unit test and i'm trying to make work a first test !

I get this long error twice:

    Fatal Error :Maximum function nesting level of '100' reached, aborting in
 C:\wamp\www\portailmg\dev\library\Zend\Test\PHPUnit\ControllerTestCase.php on line 27
    9

My bootstrap.php:

   <?php

error_reporting( E_ALL | E_STRICT );
ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
date_default_timezone_set('Europe/London');



define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../applications/portail'));
define('APPLICATION_ENV', 'development');
define('LIBRARY_PATH', realpath(dirname(__FILE__) . '/../library'));
define('TESTS_PATH', realpath(dirname(__FILE__)));


$_SERVER['SERVER_NAME'] = 'http://localhost';

$includePaths = array(LIBRARY_PATH, get_include_path());
set_include_path(implode(PATH_SEPARATOR, $includePaths));

require_once 'Zend/Loader/Autoloader.php';
$loader = Zend_Loader_Autoloader::getInstance();



Zend_Session::$_unitTestEnabled = true;
Zend_Session::start();

my phpunit.xml:

<phpunit bootstrap="./bootstrap.php" colors="false">
    <testsuite name="MyApp">
        <directory>./application/</directory>
        <directory>./library/</directory>
    </testsuite>
    <filter>
        <whitelist>
            <directory suffix=".php">../application</directory>
            <directory suffix=".php">../library/Custom</directory>
            <exclude>
                <directory suffix=".phtml">../application/views</directory>
                <file>../application/Bootstrap.php</file>
            </exclude>
        </whitelist>
    </filter>
    <logging>
        <log type="coverage-html" target="./log/coverage" charset="UTF-8"
             yui="true" highlight="false" lowUpperBound="35" highLowerBound="70"/>
    </logging>
</phpunit>

ControllerTestCase.php

<?php
class ControllerTestCase extends Zend_Test_PHPUnit_ControllerTestCase
{
    public $application;

    public function setUp()
    {
        $this->application = new Zend_Application(
            APPLICATION_ENV,
            APPLICATION_PATH . '\configs\application.ini'
        );

        $this->bootstrap = array($this, 'bootstrap');
        parent::setUp();

    }

    public function tearDown()
    {
        Zend_Controller_Front::getInstance()->resetInstance();
        $this->resetRequest();
        $this->resetResponse();

        $this->request->setPost(array());
        $this->request->setQuery(array());
    }

}
?>

HomeControllerTest.php

<?php

require_once 'application/ControllerTestCase.php';
require_once 'application/controllers/HomeControllerTest.php';

class HomeControllerTest extends ControllerTestCase
{
    public function testLoginAction()
    {
        $this->dispatch('/index/logincra'); //distribuer l'URL à tester en utilisant la méthode dispatch()
        $this->assertController('index'); //spécifie le controller à tester
        $this->assertAction('logincra'); //spécifie l'action à tester




        /*
            Assert against DOM selection; should contain exact number of nodes

            param: string $path CSS selector path
            param: string $count Number of nodes that should match
            param: string $message
            return: void
        */

        $this->assertQueryCount('div.login', 1);
    }

    public function testlogincraAction()
    {
        $this->getRequest()
        ->setMethod('POST')
        ->setPost(array("username" => "[email protected]",
                                       "password" => "password"));
        $this->dispatch('/index/logincra');

        $oLdap = new Mediagong_Ldap_Connect($_POST["username"], $_POST["password"]);

        $this->assertEquals($oLdap->isLoggin(), true);
        $this->assertRedirectTo('/index');
    }
}

Arborescence:

dev
  applications
      portail  
         configs
         controllers
         layouts
         models
         services
         views
         Bootstrap.php
  htdocs
  ..
  ..
  tests
      application
        controllers
        controllerTestCase.php
      library
      log
      bootstrap.php
      phpunit.xml

Thanks in advance for your help

Upvotes: 6

Views: 4367

Answers (2)

user1173169
user1173169

Reputation:

A simple solution solved my problem. I just commented the:

"zend_extension = "d:/wamp/bin/php/php5.3.8/zend_ext/php_xdebug-2.1.2-5.3-vc9.dll"

in php.ini file. This extension was limiting the stack to 100 so I disabled it. The recursive function is now working as anticipated.

Upvotes: 0

ferdynator
ferdynator

Reputation: 6410

In case you are using Xdebug you might want to increase the max_nesting_level. Have a look at the Xdebug manual

xdebug.max_nesting_level

Type: integer, Default value: 100

Controls the protection mechanism for infinite recursion protection. The value of this setting is the maximum level of nested functions that are allowed before the script will be aborted.

Just add the value to your php.ini. I have mine at around 250 depending on the amount of tests you run and their complexity.

Upvotes: 7

Related Questions