2013-02-08 8 views
13

Sto seguendo il tutorial ufficiale di Zend Framework 2 per la versione 2.1. Nella sezione Unit Testing, dove dovrei correre phpunit nel modulo/Application/test Sono in esecuzione nel seguente problema:Esercitazione su Zend Framework 2: Impossibile inizializzare il modulo (applicazione)

[email protected]:~/Desktop/zf2-tutorial/module/Application/test$ phpunit 
PHPUnit 3.7.13 by Sebastian Bergmann. 

Configuration read from /home/user/Desktop/zf2-tutorial/module/Application/test/phpunit.xml.dist 

E 

Time: 0 seconds, Memory: 4.00Mb 

There was 1 error: 

1) ApplicationTest\Controller\IndexControllerTest::testIndexActionCanBeAccessed 
Zend\ModuleManager\Exception\RuntimeException: Module (Application) could not be initialized. 

/home/user/Desktop/zf2-tutorial/vendor/zendframework/zendframework/library/Zend/ModuleManager/ModuleManager.php:140 
/home/user/Desktop/zf2-tutorial/vendor/zendframework/zendframework/library/Zend/ModuleManager/ModuleManager.php:81 
/home/user/Desktop/zf2-tutorial/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php:460 
/home/user/Desktop/zf2-tutorial/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php:204 
/home/user/Desktop/zf2-tutorial/vendor/zendframework/zendframework/library/Zend/ModuleManager/ModuleManager.php:100 
/home/user/Desktop/zf2-tutorial/vendor/zendframework/zendframework/library/Zend/Mvc/Application.php:239 
/home/user/Desktop/zf2-tutorial/vendor/zendframework/zendframework/library/Zend/Test/PHPUnit/Controller/AbstractControllerTestCase.php:146 
/home/user/Desktop/zf2-tutorial/vendor/zendframework/zendframework/library/Zend/Test/PHPUnit/Controller/AbstractControllerTestCase.php:173 
/home/user/Desktop/zf2-tutorial/vendor/zendframework/zendframework/library/Zend/Test/PHPUnit/Controller/AbstractControllerTestCase.php:193 
/home/user/Desktop/zf2-tutorial/vendor/zendframework/zendframework/library/Zend/Test/PHPUnit/Controller/AbstractControllerTestCase.php:236 
/home/user/Desktop/zf2-tutorial/module/Application/test/ApplicationTest/Controller/IndexControllerTest.php:20 

FAILURES! 
Tests: 1, Assertions: 0, Errors: 1. 

ho copiato il contenuto del IndexControllerTest.php dal tutorial.

<?php 

namespace ApplicationTest\Controller; 

use Zend\Test\PHPUnit\Controller\AbstractHttpControllerTestCase; 

class IndexControllerTest extends AbstractHttpControllerTestCase 
{ 
    public function setUp() 
    { 
     $this->setApplicationConfig(
      include '/home/user/Desktop/zf2-tutorial/config/application.config.php' 
     ); 
     parent::setUp(); 
    } 

    public function testIndexActionCanBeAccessed() 
    { 
     $this->dispatch('/'); // this is line 20 
     $this->assertResponseStatusCode(200); 

     $this->assertModule('application'); 
     $this->assertControllerName('application_index'); 
     $this->assertControllerClass('IndexController'); 
     $this->assertMatchedRouteName('home'); 
    } 
} 

Non ho idea del motivo per cui l'applicazione non verrà inizializzata e apprezzerei qualsiasi suggerimento.

+0

Il mio problema erano le autorizzazioni che avevo nella cartella e nei file del mio modulo. (Sono su un PC Ubuntu) – leticia

risposta

-1

Controllare il file application.config nella cartella di configurazione Root in cui dobbiamo definire le applicazioni in "moduli".

codice di esempio:

'modules' => array(
     'Application', 
     'FrontEnd', 
      ), 
+2

Ho paura che non sia così. Nella mia config/application.config.php ho ''modules' => array ( 'Application', 'Album', ), ' –

31

Questo è un problema di caricamento automatico che può essere correlato con l'opzione module_paths in config/application.config.php (nel tutorial, è quello che avete in /path/to/application/config/test/application.config.php).

Che application.config.php probabilmente assomiglia seguente:

return array(
    'modules' => array(
     'Application', 
     'Album', 
    ), 

    'module_listener_options' => array(
     'module_paths' => array(
      './module', 
      './vendor', 
     ), 
    ), 
); 

Per risolvere il problema, modificare il valore ./module in un percorso assoluto, ad esempio __DIR__ . '/../module, assumendo la application.config.php è in config/ nella directory di root dell'applicazione.

Per chiarire: il problema si verifica perché ./module è un percorso relativo al proprio cwd. Il tuo cwd durante l'esecuzione di phpunit si trova all'interno della directory di test, dove non c'è (ovviamente) alcuna directory module.

+0

Grazie per la tua risposta @Ocramius Ho provato questo, ma ho ottenuto 'PHP Errore irreversibile: chiamata al metodo non definito ApplicationTest \ Controller \ IndexControllerTest :: assertModule() in /var/www/test/zf2-tutorial/module/Application/test/ApplicationTest/Controller/IndexControllerTest.php sulla riga 22' non è sicuro se la sua risolvere un problema e provocarne un altro. –

+0

Bene, il problema sembra essere risolto lì ('IndexControllerTest :: assertModule' non esiste è un altro problema). Possiamo chattare su questo. – Ocramius

+0

Sembra che dovrebbe essere "assertModuleName' per il riferimento a tutti, sembra che sia ancora necessario aggiornare molto in questa guida utente. –