Я рекомендую вам использовать mockery/mockery
.
Я не помню сейчас, если Laravel идет с ним или нет (я думаю, да).
В любом случае вам придется сделать следующее:
В тесте вашего метода выполните:
app()->bind(\Illuminate\Http\Request::class, function () {
$mock = \Mockery::mock(\Illuminate\Http\Request::class)->makePartial();
$mock->shouldReceive('all')->andReturn(['includes' => ['some_val','another_val']]);
return $mock;
});
Что вы там делаете:
- Привязка макетак запросу, поэтому, когда вы выполните
yourMethod(Request $request)
, он будет создавать экземпляр вашего макета вместо реального класса. - Выполнение
\Mockery::mock(CLASS)->makePartial();
сначала создаст макет этого класса, а затем (makePartial()
) позволитчтобы вы могли использовать другие немодулированные методы, чтобы их можно было использовать (используйте реальные методы), поэтому любой метод, который вы не смоделировали, будет запускать реальный код. shouldReceive
позволит смоделированному классу использовать mock метод (аргумент)из shouldReceive
), поэтому мы смоделируем all
метод и возвращаем желаемое значение, в данном случае - массив, который вы разместили. - И, наконец, мы должны вернуть макет как экземпляр.
Как сказал @devk, Laravel не рекомендует насмехаться над классом Request
, так что не делайте этого, но если вам нужноk любой другой объект, вы можете использовать приведенный выше код, и он будет отлично работать.