Falsche locale in Laravel Unit Tests

Ich bin gerade über ein Problem gestolpert, bei dem Unit Tests in Laravel die falsche locale genutzt haben.

In der config/app.php ist gesetzt:

'locale' => 'de',

Trotz dessen waren alle Ausgaben in Unit Tests englisch. Das Problem rührt daher, dass Unit Tests per Default nicht das komplette Framework laden.

Für das Problem gibt es zwei Lösungsansätze.

Option 1: Testcase wechseln

Unit Tests nutzen in Laravel per Default den PHPUnit eigenen Testcase:

use PHPUnit\Framework\TestCase;

Das hat den Vorteil, dass die Unit-Tests sehr schnell laufen, aber eben nicht alle Framework-Features zur Verfügung stehen. Dies lässt sich jedoch einfach austauschen:

use Tests\TestCase;

Nun kann auf alle Framework-Features (so auch die korrekte locale) zugegriffen werden, die Tests laufen aufgrund des komplett geladenen Frameworks jedoch ein wenig langsamer

Option 2: Feature Tests nutzen

Die von Laravel empfohlene Lösung hingegen ist, für alle Tests, die den kompletten Framework-Umfang benötigen, Feature Tests zu nutzen, selbst wenn es sich dabei eigentlich um Unit-Tests handelt.

Fazit

Zu welcher Lösung man letztendlich greift, bleibt jedem selbst überlassen. Über beide Wege lässt sich das Problem schnell und einfach beheben.

Schreibe einen Kommentar