Как я могу остановить выборку Zend_Db_Table_Abstract, возвращающую мусорные данные при запуске тестов?

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

  •  10-07-2019
  •  | 
  •  

Вопрос

Я новичок в Zend, и у меня возникли некоторые трудности с созданием модульных тестов.Я сократил его до минимального тестового класса, который по-прежнему воспроизводит проблему, в надежде, что я делаю что-то глупое:

class UserRegistrationsTest extends PHPUnit_Framework_TestCase 
{ 

защищенный $db;

публичная функция __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);}

public function testname () {$ users = new users ();$select = $users->select()->where('regCode = ?', 'deadbeef');$row = $users->fetchRow($select);}

}

Итак, это упрощенный тест.У меня настроена база данных (которая подключена правильно), внутри которой есть данные.Существует запись с regCode, установленным на «deadbeef», а также поля для адреса электронной почты, regDate и партнера:

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))   

У меня есть класс Users.php, который предельно прост:

class Users extends Zend_Db_Table_Abstract {

protected $_name = 'users';

}

Моя проблема в том, что я могу нормально вставлять данные в базу данных, но любые запросы возвращают странные результаты.Вышеупомянутый метод fetchRow генерирует правильный SQL, но возвращаемая строка является мусором - он возвращает строку, содержащую столбец regCode, адрес электронной почты, вообще без столбца regDate, тогда партнер есть, но столбец называется «пользователи» вместо «партнер».

Я пробовал это на других таблицах, и ни одна из них не работала - некоторые даже возвращают имя базы данных в качестве заголовка столбца, а также имя таблицы в виде столбца.

Следует отметить, что если я не запускаю это в тесте, все работает нормально.Тот же самый код и база данных в соответствующем приложении работают отлично, но при запуске в качестве теста phpUnit все становится хреново :-(

Любой совет ценится

Ура, Брин

Это было полезно?

Решение 2

Это была старая ошибка Zend, которая сейчас исправлена.

Другие советы

Есть ли у вас какая-либо другая таблица или даже другая база данных с таблицей, имеющей поле regCode?Возможно, вы используете неправильный адаптер, и это объясняет, почему ваш запрос все еще выполняется.Обязательным условием для вашей тестовой среды должно быть, по крайней мере, то же самое, что и ваша производственная среда (таблицы + поля).Если они различаются, некоторые запросы могут выполняться хорошо, а некоторые — нет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top