我正在使用 phpunit 测试一个多语言站点。我想要执行的测试之一是应用程序将检测用户的语言环境并自动重定向。
也就是说,用户在 / 上访问该站点。应用程序检测到他们来自法国并重定向到 /fr-FR/
该应用程序似乎确实这样做了,但尝试为此编写单元测试似乎是不可能的。为了测试的目的,我需要伪造语言环境。任何人都可以建议吗?
我正在使用 phpunit 测试一个多语言站点。我想要执行的测试之一是应用程序将检测用户的语言环境并自动重定向。
也就是说,用户在 / 上访问该站点。应用程序检测到他们来自法国并重定向到 /fr-FR/
该应用程序似乎确实这样做了,但尝试为此编写单元测试似乎是不可能的。为了测试的目的,我需要伪造语言环境。任何人都可以建议吗?
解决方案是使代码本身更具可测试性。
在我的测试中,我有:
$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 中的条目。
它可能正在查看浏览器发送的Accept-Language标头。您可以在 PHP 中使用$_SERVER['HTTP_ACCEPT_LANGUAGE']
. 它是全局的,因此在您的测试设置中,您可以更改其值:
$_SERVER['HTTP_ACCEPT_LANGUAGE'] = "en";