/ / Funktionstests in Silex für Sprachumschaltung - symfony1, phpunit, silex

Funktionstests in Silex für Sprachumschaltung - symfony1, phpunit, silex

Das Problem ist, dass in den Tests die Sprache nicht wechselt, auf der Website gut funktioniert. Also scheitern die Tests.

Ich habe diesen Weg:

$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"]));

Der Test ist so:

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());
}

Hier funktioniert der Wechsel zu Französisch nicht, $ crawler-> text () zeigt immer noch den deutschen Text.

Muss ich für jede Sprache einen Test erstellen? Das testet den Sprachumschalter meiner Meinung nach nicht wirklich.

Wie kann man ein solches Szenario allgemein testen?

Antworten:

2 für die Antwort № 1

Ich vermute, dass dies auf die Funktionsweise Ihres Übersetzungscodes zurückzuführen ist. Wenn die für die Übersetzung verwendete Sprache an Ihren Übersetzer gebunden ist, ändert sich die zweite Anforderung möglicherweise nicht.

Dies ist eine der Einschränkungen von Pickel, Sie können den Container nicht zurücksetzen.

Sie können versuchen, es zu umgehen, indem Sie die Anforderungen isolieren. Sie tun dies, indem Sie das Symfony laden Process Komponente (nur sicherstellen, dass der Autoloader es finden kann) und Aufruf insulate(true) auf Ihrem BrowserKit Client Beispiel.