У меня есть приложение Laravel 5.5, в котором у меня есть провайдер услуг, который я использую, чтобы поместить что-то в атрибуты запроса-> для доступа к нему везде (упрощенно):
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, где я сочиняю некоторые вещи для представлений. Я могу получить доступ к домену $ везде, как это:
$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);
}
}