2013-03-19 91 views
10

在symfony2控制器上,我想測試一個控制器,它返回一個Response對象。我的測試課程從WebTestCase延伸。我使用static::createClient()來獲得運營客戶端。symfony2控制器的功能測試:如何生成路徑

我的問題是在我當前安裝的虛擬主機上調用好路由

$client->getContainer()->get('router')->generate('my_route', array(), true)以本地主機爲主機生成路由。但是這不起作用,因爲我的主機是myproject.local。

$client->getContainer()->get('kernel')->getRootDir()和其他dir方法提供的linux文件路徑,不是web路徑。

我不能硬編碼,因爲我並不孤單。那麼獲得正確路線的方法是什麼?還是有另一種方法來測試控制器?

+0

爲什麼你傳遞TRUE;作爲第三個參數'generate'方法?你真的需要一個絕對的URL生成嗎? – 2013-03-19 12:05:07

+0

是的,因爲默認網址也通過本地主機鏈接。 或者我需要另一種方法來測試我的控制器。 – AlphaB 2013-03-19 12:26:12

+0

是不是使用Symfony提供的測試客戶端? – 2013-03-19 12:32:04

回答

9

Symfony2中內置的測試框架(WebTestCase)只需要相對路徑,以便能夠在不同的環境中測試應用程序:

$client->getContainer()->get('router')->generate('my_route', array(), false); 

Symfony的模擬HTTP客戶端和測試針對的內核爲創建一個實例測試。沒有涉及網絡服務器。

你可以閱讀更多有關客戶端的模擬如何在這裏工作: http://symfony.com/doc/current/book/testing.html#working-with-the-test-client

7

因爲symfony文檔中提到的,你應該使用絕對路徑,因爲URL的變化會影響您的最終用戶和多數民衆贊成你在想蓋你的功能測試也是。

「對請求URL進行硬編碼是功能測試的最佳實踐,如果測試使用Symfony路由器生成URL,它將不會檢測到可能影響最終用戶的應用程序URL的任何更改。

這裏查看更多信息:http://symfony.com/doc/current/book/testing.html#working-with-the-test-client

+2

雖然這個鏈接可能回答這個問題,但最好在這裏包含答案的基本部分並提供參考鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 – serenesat 2015-08-05 09:42:19

+0

嗨@serensat感謝提示,我明白了這一點。我只是添加了關鍵部分的引用。 – honzalilak 2015-08-06 12:57:22