функциональные тесты в Silex для переключения языка - PullRequest
0 голосов
/ 31 октября 2011

Проблема в том, что в тестах langauge не будет переключаться, на сайте это хорошо.Итак, тесты не пройдены.

У меня есть такая маршрутизация:

$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 () по-прежнему показывает текст на немецком языке.

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

Что является обычным способом проверки такого сценария?

1 Ответ

2 голосов
/ 31 октября 2011

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

Это одно из ограничений прыща, вы не можете сбросить контейнер.

Вы можете попробовать обойти это, изолируя запросы.Вы делаете это, загружая компонент Symfony Process (просто убедитесь, что автозагрузчик может его найти) и вызывая insulate(true) в вашем BrowserKit Client экземпляре.

...