Ho un'applicazione con la struttura di directory predefinita, per un'applicazione senza moduli personalizzati (vedere la figura della struttura alla fine).Ottenere un'eccezione "Nessun modulo predefinito definito per questa applicazione" durante l'esecuzione dei test dell'unità di controllo in zend framework
Ho scritto un file ControllerTestCase.php come indicato in molti tutorial, e ho creato anche il file di bootstrap appropriato (ancora una volta, vedi figure alla fine).
Ho scritto alcuni test del modello che funzionano bene, ma quando ho iniziato a scrivere il file di test del controller dell'indice, con un solo test al suo interno, con solo una riga ("$ this-> dispatch ('/ '); "), sto ottenendo il seguente eccezione durante l'esecuzione phpunit (ma la navigazione con il browser nella stessa posizione - tutto è buono e di lavoro):
1) IndexControllerTest::test_indexAction_noParams
Zend_Controller_Exception: No default module defined for this application
perché è questo? Cosa ho fatto di sbagliato ?
Appendici:
struttura di directory:
-proj/
-application/
-controllers/
-IndexController.php
-ErrorController.php
-config/
-layouts/
-models/
-views/
-helpers/
-scripts/
-error/
-error.phtml
-index/
-index.phtml
-Bootstrap.php
-library/
-tests/
-application/
-controllers/
-IndexControllerTest.php
-models/
-bootstrap.php
-ControllerTestCase.php
-library/
-phpunit.xml
-public/
-index.php
(. Fondamentalmente ho qualche altro file nella directory modelli, ma non è rilevante per questa domanda)
di file Application.ini :
[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "My"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 0
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"
resources.view[] =
phpSettings.date.timezone = "America/Los_Angeles"
[staging : production]
[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1
test/applicazioni/file di bootstrap.php: file di
<?php
error_reporting(E_ALL);
// Define path to application directory
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../../application'));
// Define application environment
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'testing'));
// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
realpath(APPLICATION_PATH . '/../library'), // this project' library
get_include_path(),
)));
/** Zend_Application */
require_once 'Zend/Application.php';
require_once 'ControllerTestCase.php';
ControllerTestCase.php:
<?php
require_once ('Zend/Test/PHPUnit/ControllerTestCase.php');
class ControllerTestCase extends Zend_Test_PHPUnit_ControllerTestCase {
/**
*
* @var Zend_Application
*/
protected $application;
protected function setUp(){
$this->bootstrap = array($this, 'appBootstrap');
parent::setUp();
}
public function appBootstrap(){
$this->application = new Zend_Application(APPLICATION_ENV,
APPLICATION_PATH . '/configs/application.ini');
}
}
A dire il vero, sto utilizzando Zend Framework 1.10.2, quindi questo bug' Tuttavia, non parliamo del tutto - tu mi hai guidato alla soluzione, e cioè che mi mancava la chiamata $ this -> _ application-> bootstrap() nel metodo appBootstrap. Si prega di modificare la risposta per rimuovere il riferimento al bug, in quanto non è il caso. Grazie – Doron
io sono a 1.10.6 ora ma mi sembra di sperimentare ancora quel bug ... non so se ho fatto qualcosa di sbagliato tho. se rimuovo quella correzione, fallisce –
@jiewmeng Dai un'occhiata alla configurazione descritta da Matthew: [Test delle applicazioni Zend Framework] (http://www.slideshare.net/weierophinney/testing-zend-framework-applications) – takeshin