2011-02-24 26 views
1

大家好的PHPUnit +學說+版本可控+ ZF錯誤

我設置爲「地址」表中的版本化行爲,但是當我試圖運行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( '殘疾人',真); 版本可控連接到 '地址' 模型 它解決了這個問題

回答

0

我了。 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'); 
} 
// }}} 
+0

原因是 - 「可版本化」插件。 $ account-> Distributor-> Address-> getListener() - > setOption('disabled',true); 它解決了這個問題。 – iexx 2012-09-07 18:04:08