) к интерфейсу, так что моя тестовая реализация не должна расширяться от реальной.
у небольшой API в Laravel, частично для целей изучения этого фреймворка. Я думаю, что обнаружил зияющую дыру в документах, но это может быть из-за того, что я не понимал «путь Ларавела», чтобы делать то, что я хочу.
Я пишу HTTP API, чтобы, помимо прочего, перечислять, создавать и удалять системных пользователей на сервере Linux. Структура выглядит так:
Маршруты к/v1/users
соединятьGET
, POST
а такжеDELETE
глаголы для методов контроллераget
, create
а такжеdelete
соответственно.КонтроллерApp\Http\Controllers\UserController
на самом деле не запускает системные вызовы, что делается службойApp\Services\Users
.Служба создается ServiceProviderApp\Providers\Server\Users
который регистрируетsingleton
услуги на отсрочку.Служба создается Laravel автоматически и автоматически вводится в конструктор контроллера.ОК, так что все это работает. Я также написал тестовый код, например, так:
public function testGetUsers()
{
$response = $this->json('GET', '/v1/users');
/* @var $response \Illuminate\Http\JsonResponse */
$response
->assertStatus(200)
->assertJson(['ok' => true, ]);
}
Это тоже отлично работает. Тем не менее, это использует обычные привязки дляUserService
и я хочу вместо этого поставить макет / макет.
Я думаю, что мне нужно изменить свойUserService
к интерфейсу, который прост, но я не уверен, как сказать базовой тестовой системе, что я хочу, чтобы он запускал мой контроллер, но с нестандартным сервисом. понятноApp::bind()
всплывает в ответах Stack Overflow при исследовании этого, ноApp
В тестах, созданных ремесленниками, охват не происходит автоматически, поэтому кажется, что он цепляется за соломинку.
Как я могу создать фиктивную службу и затем отправить ее в Laravel при тестировании, чтобы он не использовал вместо этого стандартный ServiceProvider?