Ver Mensaje Individual
  #4 (permalink)  
Antiguo 09/09/2011, 12:00
Avatar de Uncontroled_Duck
Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 13 años, 7 meses
Puntos: 261
Respuesta: Duda sobre phpunit y controllerTest

Hola, gracias por pasar,

A ver si lo puedo resumir.

- Las carpetas están así:
Código:
/application
/library
    /Bisna
    /Doctrine
    /DoctrineExtensions
    /Entities
        /Entity
            /Proxy
            /Repository
            UnEntity.php
    /Symfony
    /Zend
/public
- El application.ini tiene toda la configuración de doctrine.dbal y doctrine.orm, así como los autoloaderNamespace[]

- El bootstrap tiene _initAutoloader() con esto:
Código PHP:
require_once APPLICATION_PATH '/../library/Doctrine/Common/ClassLoader.php';
$autoloader Zend_Loader_Autoloader::getInstance();

$bisnaAutoloader = new DoctrineCommonClassLoader('Bisna');
$autoloader->pushAutoloader(array($bisnaAutoloader'loadClass'), 'Bisna');

$appAutoloader = new DoctrineCommonClassLoader('Entities');
$autoloader->pushAutoloader(array($appAutoloader'loadClass'), 'Entities'); 
- Los Repository tienen las funciones que se encargan de guardar en la DB.
A esto te referías GatorV, a tener las funciones en el modelo?

- Estas funciones son llamadas desde el controller
(Que es la parte que quiero testear en caso de error)
Código PHP:
public function init()
{
    
$this->doctrine Zend_Registry::get('doctrine');
    
$this->entityManager $this->doctrine->getEntityManager();
    
$this->companiesRepository $this->entityManager
                   
->getRepository('\Entities\Entity\UnEntity');

La idea es hacer la validaciones y envolver la parte de doctrine en un try catch
Si genera una excepción alguna parte del código, pasa al catch, el cual registra el error en la db o en un log, redirige y lanza un flashmessenger para avisar al usuario de que algo no ha salido bien.

El testear hasta la función va bien, el tema está en hacer el test del try sin poner el error en el propio controller que estoy testeando.

- Y la parte del controller, create por ejemplo:
Código PHP:
# El namespace lo pongo etre comillas porque no salen en el code.
$unentity = new '\Entities\Entity\UnEntity()';
// La función del Repository
$this->UnEntityRepository->createUnEntity($unentity$form->getValues());
$this->entityManager->flush(); 
Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight