У меня есть приложение Laravel 5.5, в котором у меня есть поставщик услуг, который я использую для добавления некоторых вещей в атрибуты request- > для доступа к нему везде (упрощенно):
namespace App\Providers;
use App\Models\Domain;
use Illuminate\Http\Request;
use Illuminate\Support\ServiceProvider;
class GlobalVarsServiceProvider extends ServiceProvider
{
/**
* Register the application services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap the application services.
*
* @param Request $request
*
* @return void
*/
public function boot(Request $request)
{
$domain = .. get domain with language and some logic and cache because of multiple domains ..
$request->attributes->add(['domain' => $domain]);
}
}
Я делаю это в поставщике услуг, потому что тогда я уже могу использовать его в других поставщиках услуг, таких как мой ViewComposerServiceProvider, где я сочиняю некоторые вещи для представлений. Я могу получить доступ к $domain везде следующим образом:
$this->domain = $request->attributes->get('domain');
Это прекрасно работает. НО не в тестировании. Когда я хочу получить доступ к $domain в модульном тесте в промежуточном программном обеспечении, атрибуты $request-> пусты (в UnitTests, как и в DuskTests).
Похоже, что среда тестирования использует другой жизненный цикл запроса? Если да, то что еще изменилось в тестовой среде?
Что я делаю не так?
-- Редактировать --
Пример теста:
namespace Tests\Feature;
use Tests\TestCase;
class ExampleTest extends TestCase
{
/**
* A basic test example.
*
* @return void
*/
public function testBasicTest()
{
$response = $this->get('/');
$response->assertStatus(200);
}
}