2013-12-13 46 views
2

這是我的場景。我們在symfony中2,寫功能測試,其中測試設置引導內核:如何在不對功能控制器測試進行緩存結果的情況下使用Doctrine?

public function setUp() 
{ 
    $this->client = static::createClient(); 
    static::$kernel = static::createKernel(); 
    static::$kernel->boot(); 
    $container = static::$kernel->getContainer(); 

    $this->doctrine = $container->get('doctrine'); 
    $this->em = $this->doctrine->getManager(); 

    self::setupTestData(); 
} 

最後一步調用一個設置了測試數據的程序。它將實體管理器$ this-> em傳遞給該例程。這一切都按預期工作,測試數據可用於控制器中的代碼。

控制器更新了一些相同的實體,所以在測試中我使用相同的實體管理器來獲取這些數據並驗證結果。爲了記錄,UI沒有可用的這些字段,它們被不同的代碼庫使用,所以我們被迫在測試中加載實體並且以這種方式驗證。像:

$repository = $this->doctrine->getRepository('MyBundle:Namespace\AutoSearch'); 
$autoSearch = $repository->findBy(array('Autosearch_ID' => $this->autoSearchId)); 
//verify expected values 

無論是使用findBy或DQL我只能從測試設置,而不是由控制器修改更新的數據數據。如果我使用SQL,我可以看到修改後的數據。爲什麼?由測試和控制器中的不同實體管理器進行實體跟蹤?緩存?

任何幫助表示讚賞

回答

3

嘗試增加:

$this->em->clear(); 

清除您的實體管理器,訪問您的(更新)數據之前。這將強制實體管理器清除它對以前的對象可能具有的任何引用,並將從您的連接重新加載它們。這應該顯示更新的數據。

+2

gah!曾嘗試 - >刷新()但不是 - >清除()!謝謝 –

相關問題