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