2010-09-22 3 views
3

Я тестирую многоязычный сайт с phpunit. Один из тестов, которые я хочу выполнить, заключается в том, что приложение будет определять локаль пользователя и автоматически перенаправлять.Использование PHPUnit в приложении Zend Framework, как я могу заставить локаль использоваться для данного теста?

То есть пользователь обращается к сайту в /. Приложение обнаруживает, что они из Франции и перенаправляются на/fr-FR/

Приложение действительно делает это, но попытка написать единичный тест для этого кажется невозможным. Мне нужно подделать локаль для целей теста. Может ли кто-нибудь посоветовать?

ответ

2

Возможно, он смотрит на заголовок Accept-Language, который отправляет браузер. Вы можете получить доступ к этому в PHP с помощью $_SERVER['HTTP_ACCEPT_LANGUAGE']. Это глобально, поэтому в вашей тестовой настройке вы можете изменить его значение:

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

Спасибо, но это не сработает. Это не задано по умолчанию, поскольку оно выполняется из командной строки, и даже когда я устанавливаю его как указано выше или используя putenv, это все равно не работает. Я использую Zend_Locale в своем приложении, чтобы выполнить обнаружение. –

+0

Я пробовал: $ locale = new 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"); –

+0

Это сработало для меня. Благодаря! – Ryan

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

Не нужно использовать две строки, когда вы это сделаете: '$ locale = new Zend_Locale (Zend_Locale :: findLocale());' – BryanH