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