2012-09-13 31 views
3

我使用搜尋器測試控制器,但是當我發佈不會產生任何錯誤的表單時,它將表單保存在數據庫中。如何在symfony2中使用phpUnit進行測試時回滾任何事務

我該如何防止他在不更換控制器的情況下執行此操作,而無需測試其他內容。

這種測試有最佳做法嗎? 我試過回滾,但在ControllerTest中沒有更多的活動事務

回答

4

您需要編寫自己的擴展Symfony \ Bundle \ FrameworkBundle \ Client的測試客戶端類。 這是因爲默認客戶端不會在請求之間共享連接對象(所以您不能在測試客戶端之外使用事務)。如果你擴展測試客戶端,你可以自己處理交易。

在您的客戶端類中,您需要創建靜態連接對象,並重寫方法doRequest()以避免每次都創建新的連接對象,而是使用靜態連接對象。

這是很說明如下:

http://alexandre-salome.fr/blog/Symfony2-Isolation-Of-Tests

如果你有自己的doRequest方法你需要的是處理事務,所以你包裹手柄()方法開始,回退。你doRequest方法可能看起來像某事是:

protected function doRequest($request) 
{ 
    // here you need create your static connection object if it's doesn't exist yet 
    // and put it into service container as 'doctrine.dbal.default_connection' 

    (...) 
    self::$connection->beginTransaction(); 
    $response = $this->kernel->handle($request); 
    self::$connection->rollback(); 
    (...) 

    return $response 
} 
+0

這似乎是偉大的,感謝您的幫助 –

0

你可以閱讀的PHPUnit的文檔數據庫測試

http://www.phpunit.de/manual/3.6/en/database.html

你需要設置你的數據庫和拆除所做的更改。

如果你認爲上面的太複雜,也許你有興趣讓你的數據庫層

http://www.phpunit.de/manual/3.6/en/test-doubles.html

樣機的樣機是創建基於在原來的對象一個定製的對象,把你自己的測試控制。可能在這種情況下,你有興趣在樣機實體經理的學說

+0

PHPUnit文件的數據庫測試沒有幫助和你提供的鏈接不工作。 –

相關問題