2013-02-18 32 views
0

我似乎失去了一些東西真的很明顯,但是這讓我發瘋:的Symfony2單元測試與主義實體

爲了測試我的代碼,我需要把我的實體爲定義的狀態。它根本不起作用。它完全忽略了我做任何改變,例如像這樣:

$this->test_character->setLocation(null); 

    $crawler = $this->client->request('GET', '/en/character/start'); 
    $this->assertTrue($this->client->getResponse()->isSuccessful(), "start page failed to load"); 
    $this->assertGreaterThan(0, $crawler->filter('html:contains("Character Placement")')->count(), 'start page content failure'); 

調試這個測試表明,由於位置不在,其實設置爲null失敗。添加一個flush()不會改變任何東西,所以這不是問題。我最好的猜測是,它只在測試客戶端上進行更改,而不是在生成頁面的後端上,但是這留下了問題:我如何將我的實體置於已定義狀態以測試它們?

+0

$ this-> test_character與測試有什麼關係?當您測試後端時,您會模擬訪問它的客戶端(瀏覽器)。你不應該做任何不同於客戶可以對你的應用程序做什麼。 – 2013-02-18 14:49:35

回答

1

你說得對 - 處理你的測試請求的內核是你的應用程序的一個獨立實例。它將無法訪問您推測會加載到test_character中的實體,除非您在發出請求之前將刷新到數據庫。

您是否考慮過使用Fixtures?如果你正在做的是初始化一些準備測試請求/響應的實體,那麼這是正確的方法。你永遠不需要直接與你的功能測試中的實體工作。

您可能也想看看Liip functional test bundle自動設置您的測試數據庫和測試夾具。

+0

謝謝。是的,我已經考慮過燈具,但我有點不喜歡在A處定義數據集然後依靠它的具體細節B--我寧願將它捆綁在一個地方。至少這是我這樣做背後的想法。 我會看看Liip包。 – Tom 2013-02-18 23:26:35

+0

我正在與您的解決方案。這似乎是Symfony想要完成的方式。 – Tom 2013-02-19 10:53:31

+0

對不起 - 我錯誤地低估了這一點。我以爲我會不小心提出這個問題並試圖解決這個問題。除非編輯答案,否則不會讓我再次投票。 – 2014-06-04 11:02:35