1
我設置爲「地址」表中的版本化行爲,但是當我試圖運行PHPUnit測試我有以下錯誤:
SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction
我在我的testCase上有2個'test *'方法。如果我只留下1,那麼它就會起作用,如果> 1 - 那麼我得到那個錯誤。
下面是代碼:
類UserTest延伸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 [email protected] on xxxx__tmp_testing
START TRANSACTION
INSERT INTO address_version (...) VALUES (...)
rollback
rollback
它會斷開連接,但我不知道爲什麼。如果我刪除「可版本化」行爲 - 那麼它的工作原理!
你能幫我嗎。我真的與它疊加,不知道錯誤原因:(
感謝您的關注
更新:!
的原因是「多版本」插件我們必須在PHPUnit測試禁用它:$帳戶 - >分銷商─>地址 - > getListener() - >的SetOption( '殘疾人',真); 版本可控連接到 '地址' 模型 它解決了這個問題
原因是 - 「可版本化」插件。 $ account-> Distributor-> Address-> getListener() - > setOption('disabled',true); 它解決了這個問題。 – iexx 2012-09-07 18:04:08