0
问题是在测试中,语言不会切换,在网站上是不错的。 所以测试失败。Silex语言切换功能测试
我有这样的路由:
$app->before(function() use ($app) {
if ($locale = $app['request']->get('locale')) {
$app['locale'] = $locale;
}
...
});
$app->get('/{locale}/index', function() use ($app) {
return $app['twig']->render('index.twig');
})->assert('locale',implode('|', $app['languages']));
$app->get('/{locale}', function() use ($app) {
return $app->redirect("/".$app['locale']."/index");
})->assert('locale',implode('|', $app['languages']));
测试是这样:
public function testLanguageRoutes(){
$client = $this->createClient();
$client->followRedirects();
$crawler = $client->request('GET', '/de');
$this->assertTrue($client->getResponse()->isOk());
$this->assertTrue($crawler->filter('html:contains("Kopf")')->count() > 0);
$crawler = $client->request('GET', '/de/index');
$this->assertTrue($client->getResponse()->isOk());
$this->assertTrue($crawler->filter('html:contains("Kopf")')->count() > 0);
$crawler = $client->request('GET', '/fr');
$this->assertTrue($client->getResponse()->isOk());
//TODO not working, still returns de should return fr
var_dump($crawler->text());
$this->assertTrue($crawler->filter('html:contains("Pied")')->count() > 0);
$crawler = $client->request('GET', '/aa');
$this->assertTrue($client->getResponse()->isNotFound());
}
这里切换到法国不会工作,$ crawler->文本()仍显示德语文本。
我必须为每种语言创建一个测试吗? 在我看来,这不会真的测试语言切换。
测试这种情况的常用方法是什么?
你是什么意思:“绑定到你的翻译”? 实际上,我只需注册TranslationServiceProvider并使用: $ app ['locale'] = $ locale; 与文档中的示例几乎相同 – ivoba
正是这个问题。翻译器(如果您查看TranslationServiceProvider代码)用'locale'参数进行初始化,然后将其用于容器的进一步存在。我会在silex跟踪器上打开一张票,但我不能保证我们会为它找到一个修复程序。 – igorw
我明白了,好吧我现在调整我的测试,非常感谢这些信息 – ivoba