¿Cómo puedo evitar que Zend_Db_Table_Abstract fetchrow devuelva datos basura al ejecutar pruebas?

StackOverflow https://stackoverflow.com/questions/1643380

  •  10-07-2019
  •  | 
  •  

Pregunta

Soy bastante nuevo en Zend y tengo algunas dificultades para crear mis pruebas unitarias. Lo he reducido a una clase de prueba mínima que todavía replica el problema con la esperanza de que sea algo tonto lo que estoy haciendo:

class UserRegistrationsTest extends PHPUnit_Framework_TestCase 
{ 

protegido $ db;

función pública __construct ($ name = NULL)  {   parent :: __ construct ($ nombre);

$ this- > db = Zend_Db :: factory ('Pdo_Mysql', array (    'host' = > '127.0.0.1',    'username' = > 'raíz',    'contraseña' = > 'xxxxxxxx',    'dbname' = > 'testingdb'    ));

Zend_Db_Table_Abstract :: setDefaultAdapter ($ this- > db);  }

función pública testName ()     {        $ usuarios = nuevos usuarios ();        $ select = $ users- > select () - > where ('regCode =?', 'deadbeef');        $ fila = $ usuarios- > fetchRow ($ select);  }

}

Entonces esta es la prueba simplificada. Tengo una configuración de base de datos (que se conecta correctamente) que tiene datos dentro. Hay un registro con regCode establecido en 'deadbeef' y también tiene campos para correo electrónico, regDate y afiliados:

CREATE TABLE  testingdb.users (
         regCode varchar(16) NOT NULL,
         email varchar(150) NOT NULL,
         regDate datetime NOT NULL,
         affiliate int(10) unsigned DEFAULT NULL,
         PRIMARY KEY (regCode))   

Tengo una clase llamada Users.php que es tan simple como se pone:

class Users extends Zend_Db_Table_Abstract {

protected 

Soy bastante nuevo en Zend y tengo algunas dificultades para crear mis pruebas unitarias. Lo he reducido a una clase de prueba mínima que todavía replica el problema con la esperanza de que sea algo tonto lo que estoy haciendo:

class UserRegistrationsTest extends PHPUnit_Framework_TestCase 
{ 

protegido $ db;

función pública __construct ($ name = NULL)  {   parent :: __ construct ($ nombre);

$ this- > db = Zend_Db :: factory ('Pdo_Mysql', array (    'host' = > '127.0.0.1',    'username' = > 'raíz',    'contraseña' = > 'xxxxxxxx',    'dbname' = > 'testingdb'    ));

Zend_Db_Table_Abstract :: setDefaultAdapter ($ this- > db);  }

función pública testName ()     {        $ usuarios = nuevos usuarios ();        $ select = $ users- > select () - > where ('regCode =?', 'deadbeef');        $ fila = $ usuarios- > fetchRow ($ select);  }

}

Entonces esta es la prueba simplificada. Tengo una configuración de base de datos (que se conecta correctamente) que tiene datos dentro. Hay un registro con regCode establecido en 'deadbeef' y también tiene campos para correo electrónico, regDate y afiliados:

CREATE TABLE  testingdb.users (
         regCode varchar(16) NOT NULL,
         email varchar(150) NOT NULL,
         regDate datetime NOT NULL,
         affiliate int(10) unsigned DEFAULT NULL,
         PRIMARY KEY (regCode))   

Tengo una clase llamada Users.php que es tan simple como se pone:

<*>

Mi problema es que puedo insertar bien en la base de datos, pero cualquier consulta devuelve resultados extraños. El fetchRow anterior genera el SQL correcto pero la fila devuelta es basura: devuelve una fila que contiene regCode, correo electrónico, ninguna columna regDate en absoluto, luego el afiliado está allí pero la columna se llama 'usuarios' en lugar de 'afiliado'.

Lo he probado en otras tablas y ninguna funciona; algunas incluso devuelven el nombre de la base de datos como encabezado de columna, así como el nombre de la tabla como columna.

Una cosa a tener en cuenta es que si no estoy ejecutando esto en una prueba, funciona bien. El mismo código y db exactos en la aplicación adecuada funcionan muy bien, pero se ejecutan como una prueba de phpUnit y todo se complica :-(

Cualquier consejo apreciado

Saludos, Bryn

name = 'users'; }

Mi problema es que puedo insertar bien en la base de datos, pero cualquier consulta devuelve resultados extraños. El fetchRow anterior genera el SQL correcto pero la fila devuelta es basura: devuelve una fila que contiene regCode, correo electrónico, ninguna columna regDate en absoluto, luego el afiliado está allí pero la columna se llama 'usuarios' en lugar de 'afiliado'.

Lo he probado en otras tablas y ninguna funciona; algunas incluso devuelven el nombre de la base de datos como encabezado de columna, así como el nombre de la tabla como columna.

Una cosa a tener en cuenta es que si no estoy ejecutando esto en una prueba, funciona bien. El mismo código y db exactos en la aplicación adecuada funcionan muy bien, pero se ejecutan como una prueba de phpUnit y todo se complica :-(

Cualquier consejo apreciado

Saludos, Bryn

¿Fue útil?

Solución 2

Este era un viejo error de Zend que se solucionó ahora

Otros consejos

¿Tiene alguna otra tabla o incluso otra base de datos con una tabla que tenga un campo regCode? Podría estar usando el adaptador incorrecto, eso explicaría por qué su consulta aún se ejecuta. El requisito previo para su entorno de prueba sería al menos tener exactamente la misma estructura que su entorno de producción (tablas + campos). Si difieren, algunas consultas pueden ejecutarse bien, otras no.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top