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()仍然显示德语文本。

我必须为每种语言创建一个测试吗?在我看来,这不会真正测试语言开关。

测试这样的场景的常用方法是什么?

4

1 回答 1

2

我怀疑这是由于您的翻译代码的工作方式。如果用于翻译的语言与您的翻译人员相关联,那么它可能不会在第二次请求时更改。

这是疙瘩的限制之一,你不能重置容器。

您可以尝试通过隔离请求来解决它。你可以通过加载 SymfonyProcess组件(只要确保自动加载器可以找到它)并调用insulate(true)你的BrowserKit Client实例来做到这一点。

于 2011-10-31T10:53:42.080 回答