Zend Framework: Introduzione a Zend_Test
-
19-08-2019 - |
Domanda
Qualcuno ha avuto successo nell'impostare Zend_Test? Qual è stato il tuo metodo / approccio e come esegui i tuoi test / test suite?
Ho già PHPUnit installato e funzionante. Ora sto cercando di scrivere alcuni semplici test del controller. La documentazione di Zend Framework presuppone che sia installato il caricamento automatico, cosa che non ho fatto. Quale metodo usi tu per caricare automaticamente i file appropriati? Lo faccio nel mio normale file bootstrap, ma non voglio ingombrare il mio test con un sacco di include e impostare percorsi. Una classe di test case controller astratta sarebbe la strada da percorrere?
Che dire del plug-in bootstrap come usa la documentazione ... è così che fai il bootstrap dei test o ti piace farlo in un modo diverso? Vorrei riutilizzare il più possibile il normale file bootstrap. Come devo ASCIUGARE il mio bootstrap per i test e il normale utilizzo?
Ecco il mio test finora:
<?php
class IndexControllerTest extends Zend_Test_PHPUnit_ControllerTestCase
{
public function setUp()
{
$this->bootstrap = array($this, 'appBootstrap');
parent::setUp();
}
public function appBootstrap()
{
$this->frontController->registerPlugin(new Bootstrapper('testing'));
}
public function testIndexAction()
{
$this->dispatch('/index');
$this->assertController('index');
$this->assertAction('index');
}
}
//straight from the documentation
class Bootstrapper extends Zend_Controller_Plugin_Abstract
{
/**
* @var Zend_Config
*/
protected static Qualcuno ha avuto successo nell'impostare Zend_Test? Qual è stato il tuo metodo / approccio e come esegui i tuoi test / test suite?
Ho già PHPUnit installato e funzionante. Ora sto cercando di scrivere alcuni semplici test del controller. La documentazione di Zend Framework presuppone che sia installato il caricamento automatico, cosa che non ho fatto. Quale metodo usi tu per caricare automaticamente i file appropriati? Lo faccio nel mio normale file bootstrap, ma non voglio ingombrare il mio test con un sacco di include e impostare percorsi. Una classe di test case controller astratta sarebbe la strada da percorrere?
Che dire del plug-in bootstrap come usa la documentazione ... è così che fai il bootstrap dei test o ti piace farlo in un modo diverso? Vorrei riutilizzare il più possibile il normale file bootstrap. Come devo ASCIUGARE il mio bootstrap per i test e il normale utilizzo?
Ecco il mio test finora:
<*>
Cosa devo fare?
config;
/**
* @var string Current environment
*/
protected Qualcuno ha avuto successo nell'impostare Zend_Test? Qual è stato il tuo metodo / approccio e come esegui i tuoi test / test suite?
Ho già PHPUnit installato e funzionante. Ora sto cercando di scrivere alcuni semplici test del controller. La documentazione di Zend Framework presuppone che sia installato il caricamento automatico, cosa che non ho fatto. Quale metodo usi tu per caricare automaticamente i file appropriati? Lo faccio nel mio normale file bootstrap, ma non voglio ingombrare il mio test con un sacco di include e impostare percorsi. Una classe di test case controller astratta sarebbe la strada da percorrere?
Che dire del plug-in bootstrap come usa la documentazione ... è così che fai il bootstrap dei test o ti piace farlo in un modo diverso? Vorrei riutilizzare il più possibile il normale file bootstrap. Come devo ASCIUGARE il mio bootstrap per i test e il normale utilizzo?
Ecco il mio test finora:
<*>
Cosa devo fare?
env;
/**
* @var Zend_Controller_Front
*/
protected Qualcuno ha avuto successo nell'impostare Zend_Test? Qual è stato il tuo metodo / approccio e come esegui i tuoi test / test suite?
Ho già PHPUnit installato e funzionante. Ora sto cercando di scrivere alcuni semplici test del controller. La documentazione di Zend Framework presuppone che sia installato il caricamento automatico, cosa che non ho fatto. Quale metodo usi tu per caricare automaticamente i file appropriati? Lo faccio nel mio normale file bootstrap, ma non voglio ingombrare il mio test con un sacco di include e impostare percorsi. Una classe di test case controller astratta sarebbe la strada da percorrere?
Che dire del plug-in bootstrap come usa la documentazione ... è così che fai il bootstrap dei test o ti piace farlo in un modo diverso? Vorrei riutilizzare il più possibile il normale file bootstrap. Come devo ASCIUGARE il mio bootstrap per i test e il normale utilizzo?
Ecco il mio test finora:
<*>
Cosa devo fare?
front;
/**
* @var string Path to application root
*/
protected Qualcuno ha avuto successo nell'impostare Zend_Test? Qual è stato il tuo metodo / approccio e come esegui i tuoi test / test suite?
Ho già PHPUnit installato e funzionante. Ora sto cercando di scrivere alcuni semplici test del controller. La documentazione di Zend Framework presuppone che sia installato il caricamento automatico, cosa che non ho fatto. Quale metodo usi tu per caricare automaticamente i file appropriati? Lo faccio nel mio normale file bootstrap, ma non voglio ingombrare il mio test con un sacco di include e impostare percorsi. Una classe di test case controller astratta sarebbe la strada da percorrere?
Che dire del plug-in bootstrap come usa la documentazione ... è così che fai il bootstrap dei test o ti piace farlo in un modo diverso? Vorrei riutilizzare il più possibile il normale file bootstrap. Come devo ASCIUGARE il mio bootstrap per i test e il normale utilizzo?
Ecco il mio test finora:
<*>
Cosa devo fare?
root;
/**
* Constructor
*
* Initialize environment, root path, and configuration.
*
* @param string $env
* @param string|null $root
* @return void
*/
public function __construct($env, $root = null)
{
$this->_setEnv($env);
if (null === $root) {
$root = realpath(dirname(__FILE__) . '/../../../');
}
$this->_root = $root;
$this->initPhpConfig();
$this->_front = Zend_Controller_Front::getInstance();
}
/**
* Route startup
*
* @return void
*/
public function routeStartup(Zend_Controller_Request_Abstract $request)
{
$this->initDb();
$this->initHelpers();
$this->initView();
$this->initPlugins();
$this->initRoutes();
$this->initControllers();
}
// definition of methods would follow...
}
Cosa devo fare?
Soluzione
Ecco cosa ho fatto per farlo funzionare:
Innanzitutto, dobbiamo risolvere il problema di caricamento automatico. Lo faremo creando un file che includerà tutti i test e lo inseriremo nella directory dei test. Nota: ho praticamente copiato tutto questo dal mio /public/index.php.
# /tests/loader.php
<?php
define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application/'));
set_include_path( APPLICATION_PATH . '/../library' . PATH_SEPARATOR .
APPLICATION_PATH . '/models' . PATH_SEPARATOR .
APPLICATION_PATH . '/forms' . PATH_SEPARATOR .
get_include_path() );
require_once "Zend/Loader.php";
Zend_Loader::registerAutoload();
In secondo luogo, dobbiamo includere questo file nel nostro test. Il nostro file di test è in / test / applicazione / controller /. Non userò il mio bootstrap come plugin poiché il mio file bootstrap funziona allo stesso modo di Tutorial di avvio rapido . Mi limiterò a collegarlo impostando la posizione come $ bootstrap pubblico. Quando Zend_Test_PHPUnit_ControllerTestCase
costruisce, cercherà il file bootstrap che impostiamo qui.
<?php
require_once '../../loader.php';
class IndexControllerTest extends Zend_Test_PHPUnit_ControllerTestCase
{
public $bootstrap = '../../../application/bootstrap.php';
public function testIndexAction()
{
$this->dispatch('/index');
$this->assertController('index');
$this->assertAction('index');
}
}
E questo è tutto! Se il mio file bootstrap era già un plug-in, questo potrebbe essere un po 'più complicato, ma poiché non lo è, è super facile.
Altri suggerimenti
Invece di usare
require_once "Zend/Loader.php";
Zend_Loader::registerAutoload();
modificalo in
require_once 'Zend/Loader/Autoloader.php';
Zend_Loader_Autoloader::getInstance();
registerAutoLoad () è obsoleto a partire da 1.8.0
Uso sempre un semplice TestHelper.php che esegue alcune operazioni di inizializzazione di base. Questo file è incluso in ogni file di test case. Una delle cose che faccio è la registrazione del caricatore automatico di Zend Framework poiché ho riscontrato grossi problemi di dipendenza, specialmente durante l'utilizzo di filtri, validatori e moduli. È quasi impossibile tenere traccia di tutti i file richiesti e includerli manualmente nei casi di test.
Puoi forse spostare l'inizializzazione del caricamento automatico e la configurazione dei percorsi di inclusione nel tuo plugin di bootstrap poiché questa procedura dovrebbe essere la stessa per l'applicazione reale.