Проблема в том, что в тестах язык не переключается, на сайте все нормально. Так что тесты проваливаются.
У меня есть эта маршрутизация:
$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->text() по-прежнему показывает немецкий текст.
Должен ли я создавать один тест для каждого языка? На мой взгляд, это не проверит переключение языка.
Каков общий способ тестирования такого сценария?