PHPUnit + Doctrine + Versionable + ZF ошибка - PullRequest
1 голос
/ 24 февраля 2011

Привет всем ,

Я настроил поведение с поддержкой версий для таблицы «Адрес», но когда я пытаюсь запустить тесты PHPUnit, у меня появляется следующая ошибка:

SQLSTATE [HY000]: общая ошибка: 1205 Превышено время ожидания блокировки;попробуйте перезапустить транзакцию

У меня есть 2 метода 'test *' на моем testCase.Если я оставляю только 1, тогда это работает, если> 1 - тогда я получаю эту ошибку.

Вот код:

класс UserTest extends DbTestCase {

protected $object;

protected function setUp()
{ 
    // zf bootstrap here and doctrine connect
    parent::setUp();

    // clean/create tmp tables
    $this->_prepareDB();
    $this->object = new User;
}

public function testGetFullUsername()
{
    $model = new User;
    $model->email      = $email . time();
    ...

    $model->Supplier->Address->firstname = $first_name;
    $model->Supplier->Address->lastname  = $last_name;
    ...
    $model->UserRight[0]->role      = 'Supplier';
    $model->UserRight[0]->resource  = '*';
    $model->UserRight[0]->privilege = '';
    $model->save();
}
// it can be even the same
public function testRoles()
{
    $model = new User;
    $model->email      = $email . time();
    ...

    $model->Supplier->Address->firstname = $first_name;
    $model->Supplier->Address->lastname  = $last_name;
    ...
    $model->UserRight[0]->role      = 'Supplier';
    $model->UserRight[0]->resource  = '*';
    $model->UserRight[0]->privilege = '';
    $model->save();
}

}

Когда PHPunit запускается, второй метод завершает транзакции и запускает другой:

// 1st method
// thread id: 412
START TRANSACTION
INSERT INTO user (...) VALUES (...)
INSERT INTO address (...) VALUES ('...')
INSERT INTO address_version (...) VALUES (...)
INSERT INTO supplier (...) VALUES (...)
INSERT INTO user_right (...) VALUES (..)
commit

// 2nd method
// thread id: 413
START TRANSACTION
INSERT INTO user (...) VALUES (...)
INSERT INTO address (..) VALUES (...)
// then new thread created (server disconnects), id: 414

CONNECT xxxxx@localhost on xxxx__tmp_testing
START TRANSACTION
INSERT INTO address_version (...) VALUES (...)
rollback
rollback

Он разрывает соединение, но я не знаю почему.Если я уберу «Версионное» поведение - тогда оно сработает!

Можете ли вы мне помочь.Я действительно стека с этим и не знаю причину ошибки: (

Спасибо за Ваше внимание!

ОБНОВЛЕНИЕ:

Причинабыл в плагине "versionable". Мы должны отключить его в тестах phpunit: $ account-> Distributor-> Address-> getListener () -> setOption ('disabled', true); Versionable присоединен к модели 'Address'.проблема.

1 Ответ

0 голосов
/ 06 июня 2011

У меня была такая же проблема с партией REPLACE / INSERT-запросов.

Я мог бы обойти проблему с инициализацией постоянных соединений в phpunit.

// {{{ getConnection()
/**
 * gets database connection
 */
protected function getConnection() {
    $pdo = new pdo("mysql:dbname=depage_phpunit;host=localhost", "root", "", array(
        \PDO::ATTR_PERSISTENT => true,
    ));

    return $this->createDefaultDBConnection($pdo, 'testdb');
}
// }}}
...