Запрос на тестирование Laravel - Поставщик услуг - Проблема промежуточного программного обеспечения - PullRequest
0 голосов
/ 03 мая 2018

У меня есть приложение 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);
    }
}

1 Ответ

0 голосов
/ 03 мая 2018

TestCase использует черту MakesHttpRequests, которая имеет метод call. Когда вы используете get метод в своих тестах, это просто ярлык для этого.

В своем тесте вы можете использовать его так:

$this->call('GET', '/url/here', $yourRequestParametersHere);
...