Добрый день, есть простая логика локализации на сайте:
Контроллер с роутом, на который пользователь переходит для установки языка:
Route::get('lang/{lang}', ['uses'=>'LanguageController@setLang'])->name('lang.set');
public function setLang($lang)
{
if (array_key_exists($lang, config('languages'))) {
setcookie ('applocale', $lang, 0, '/', NULL, 0 );
}
return redirect()->back();
}
Также есть глобальное middleware, которое висит на любом запросе и по куки определяет язык отображения:
public function handle($request, Closure $next)
{
$requestedLocale = $request->cookie('applocale');
$applocale = config('app.locale'); // default locale
if( $requestedLocale !== null && array_key_exists($requestedLocale, config('languages'))) {
$applocale = $requestedLocale;
}
app()->setLocale($applocale);
session()->put('applocale', $applocale);
Carbon::setLocale($applocale);
return $next($request);
}
Я пытаюсь написать тест для проверки установки этой самой куки:
/**
* Language can be changed.
*
* @return void
*
* @runInSeparateProcess
*/
public function testChangeLanguage()
{
print 'Locale before: ' . app()->getLocale() . "\n";
$this->get('/lang/en')->assertStatus(302);
print 'Locale after: ' . app()->getLocale();
$this->get('/')->assertCookie('applocale');
}
Но в результате phpunit выдает ошибку:
Cookie [applocale] not present on response.
Failed asserting that null is not null.
C:\...\vendor\laravel\framework\src\Illuminate\Foundation\Testing\TestResponse.php:154
C:\...\tests\Feature\LanguageTest.php:24
Locale before: ru
Locale after: ru
Каким образом протестировать это?