Symfony2 - 单元测试中的语言环境
Symfony2 - Locale in unit tests
我来自德国,在工作中我们使用旧的 Symfony2 版本 (2.1)。
我写了一个名为 "GermanDateExtension".
的树枝过滤器
public function getGermanDateFilter($date, $format)
{
setlocale(LC_TIME, 'de_DE.utf8');
return strftime($format, $date);
}
通过 setlocale() 设置区域设置,并将返回格式化的日期。
我还为这个过滤器写了一些单元测试。
public function testGermanDay()
{
$germanDate = new GermanDateExtension();
$result = $germanDate->getGermanDateFilter($this->testDate, '%A');
$this->assertEquals('Mittwoch', $result);
}
默认区域设置应为 "de"(在 parameters.ini 中)。
代码在我的网站上运行没有问题,但测试失败。
问题来了:
如果我执行测试,默认语言环境是 "en" 并且 setlocale() 调用被忽略。因此返回的是英文名称 "Wednesday" 而不是 "Mittwoch"。
你有什么办法解决这个问题吗?
提前致谢!
我自己才发现问题。
使用 windows 命令行,找不到区域设置 "de_DE.utf8"。所以 setlocale() 失败了,默认的语言环境是 "en".
使用 linux shell 一切都很顺利。所以在使用语言环境和 windows...
时要小心
我来自德国,在工作中我们使用旧的 Symfony2 版本 (2.1)。 我写了一个名为 "GermanDateExtension".
的树枝过滤器public function getGermanDateFilter($date, $format)
{
setlocale(LC_TIME, 'de_DE.utf8');
return strftime($format, $date);
}
通过 setlocale() 设置区域设置,并将返回格式化的日期。 我还为这个过滤器写了一些单元测试。
public function testGermanDay()
{
$germanDate = new GermanDateExtension();
$result = $germanDate->getGermanDateFilter($this->testDate, '%A');
$this->assertEquals('Mittwoch', $result);
}
默认区域设置应为 "de"(在 parameters.ini 中)。 代码在我的网站上运行没有问题,但测试失败。
问题来了: 如果我执行测试,默认语言环境是 "en" 并且 setlocale() 调用被忽略。因此返回的是英文名称 "Wednesday" 而不是 "Mittwoch"。
你有什么办法解决这个问题吗?
提前致谢!
我自己才发现问题。 使用 windows 命令行,找不到区域设置 "de_DE.utf8"。所以 setlocale() 失败了,默认的语言环境是 "en".
使用 linux shell 一切都很顺利。所以在使用语言环境和 windows...
时要小心