2010-09-22 68 views
3

我正在用phpunit測試一個多語言站點。我想要執行的測試之一是應用程序將檢測用戶的區域設置並自動重定向。在Zend Framework應用程序中使用PHPUnit,我如何強制將語言環境用於給定的測試?

也就是說,用戶訪問上/網站。應用程序檢測,他們來自法國是和重定向到/ FR-FR/

應用程序確實出現了這樣做,但嘗試寫單元測試,這似乎是不可能的。爲了測試的目的,我需要僞造場所。任何人都可以建議嗎?

回答

2

它可能看Accept-Language頭的瀏覽器發送。您可以使用$_SERVER['HTTP_ACCEPT_LANGUAGE']在PHP中訪問它。這是一個全球性的,所以在你的測試設置中,你可以改變它的值:

$_SERVER['HTTP_ACCEPT_LANGUAGE'] = "en"; 
+0

謝謝,但這是行不通的。這不是默認設置,因爲它是從命令行運行的,甚至當我將它設置爲如上或使用putenv時,這仍然不起作用。 我在我的應用程序中使用Zend_Locale來執行檢測。 – 2010-09-23 08:00:31

+0

我曾嘗試: $區域=新從Zend_Locale(); $ locale-> setDefault('fr_FR'); $ locale-> setLocale('fr_FR'); Zend_Registry :: set('Zend_Locale',$ locale); setlocale(LC_ALL,'fr_FR'); \t $ _SERVER [ 'HTTP_ACCEPT_LANGUAGE'] = 'fr_FR目錄'; putenv(「HTTP_ACCEPT_LANGUAGE = fr_FR」); – 2010-09-23 08:05:53

+0

這對我有用。謝謝! – Ryan 2013-02-04 23:08:46

4

解決方案是讓代碼本身更具可測性。

在我的測試,我有:

$locale = new Zend_Locale(); 

    $locale->setLocale('fr_FR'); 
    Zend_Registry::set('Zend_Locale', $locale); 

現在在我的應用我使用:

$locale = Zend_Locale::findLocale(); 
    $locale = new Zend_Locale($locale); 

設置語言環境。由於findLocale首先檢查Zend_Registry的條目。

+0

無需使用兩條線路時,人會做:'$區域=新從Zend_Locale(從Zend_Locale :: findLocale());' – BryanH 2012-06-07 18:26:28

相關問題