0

問題は、テストでは言語が切り替わらず、ウェブサイトではうまくいくことです。したがって、テストは失敗します。

私はこのルーティングを持っています:

$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 つのテストを作成する必要がありますか? 私の意見では、それは本当に言語切り替えをテストしません。

そのようなシナリオをテストする一般的な方法は何ですか?

4

1 に答える 1