Como posso parar Zend_Db_Table_Abstract fetchrow retornar dados de lixo ao executar testes?
-
10-07-2019 - |
Pergunta
Eu sou bastante novo para o Zend e estou tendo algumas dificuldades com a criação de meus testes de unidade. Eu despojado-lo para baixo a uma classe de teste mínimo que ainda replica o problema, na esperança de que isso é algo idiota que eu estou fazendo:
class UserRegistrationsTest extends PHPUnit_Framework_TestCase
{
$ protegidos db;
função pública __construct ($ name = NULL) { parent :: __ construct ($ name);
$ this-> db = Zend_Db :: factory ( 'pdo_mysql', array ( 'Host' => '127.0.0.1', 'Username' => 'root', 'Password' => 'xxxxxxxx', 'Dbname' => 'testingdb' ));
Zend_Db_Table_Abstract :: setDefaultAdapter ($ this-> db); }
função pública TestName () { $ users = novos usuários (); $ Selecionar = $ usuários-> selecione () -> where ( 'RegCode =?', 'DeaDBeeF'); $ Row = $ usuários-> fetchRow ($ selecionar); }
}
Portanto, este é o teste simplificado. I têm um db definido acima (que é a liga correctamente) que tem dados no seu interior. Há um registro com RegCode conjunto para 'DeaDBeeF' e também tem campos para e-mail, regDate e da filial:
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))
Eu tenho uma classe chamada users.php que é tão simples quanto ele ganha:
class Users extends Zend_Db_Table_Abstract {
protected $_name = 'users';
}
O meu problema é que eu posso inserir no banco de dados muito bem, mas qualquer dúvida retornar resultados ímpares. O fetchRow acima gera o SQL correto, mas a linha retornada é lixo - ele retorna uma linha que contém RegCode, email, nenhuma coluna regDate em tudo, então o afiliado está lá, mas o collumn é chamado 'users' em vez de 'filial'
Eu tentei em outras mesas e nenhum trabalho -. Alguns até mesmo retornar o nome do banco de dados como um cabeçalho de coluna, bem como o nome da tabela como uma coluna
Uma coisa a notar é que, se eu não estou correndo este em um teste funciona bem. O exato mesmo código e db na grande adequada de trabalho aplicativo, mas funcionando como um teste PHPUnit e fica tudo screwy: - (
Algum conselho apreciado
Cheers, Bryn
Solução 2
Este era um velho bug Zend que é fixo agora
Outras dicas
Você tem qualquer outra tabela ou até mesmo outro banco de dados com uma tabela que tem um campo RegCode? Você poderia estar usando o adaptador errado, isso explicaria por que sua consulta ainda executa. Pré-requisito para o seu ambiente de teste seria, pelo menos, ter a mesma estrutura exata como seu ambiente de produção (tabelas + campos). Se eles diferem, algumas consultas podem executar bem, alguns outros podem não.