С Laravel Framework 5.8.36 Я пытаюсь запустить тест, который вызывает контроллер, где метод __construct использует DI, например:
class SomeController extends Controller {
public function __construct(XYZRepository $xyz_repository)
{
$this->xyz_repository = $xyz_repository;
}
public function doThisOtherThing(Request $request, $id)
{
try {
return response()->json($this->xyz_repository->doTheRepoThing($id), 200);
} catch (Exception $exception) {
return response($exception->getMessage(), 500);
}
}
}
Это прекрасно работает, если я запускаю код через браузер или вызовите его как вызов API в почтальоне, но когда я вызываю метод doThisOtherThing
из своего теста, я получаю следующую ошибку:
ArgumentCountError: слишком мало аргументов для функции App \ Http \ Controllers \ SomeController :: __ construct (), 0 передано в / var / www/tests/Unit/Controllers/SomeControllerTest.php в строке 28 и ровно 1 ожидается
Это говорит мне о том, что DI по какой-то причине не работает, когда я запустить тесты. Любые идеи? Вот мой тест:
public function testXYZShouldDoTheThing()
{
$some_controller = new SomeController();
$some_controller->doThisOtherThing(...args...);
...asserts...
}
Я пробовал такие вещи, как использование методов bind и make в приложении в методе setUp, но безуспешно:
public function setUp(): void
{
parent::setUp();
$this->app->make('App\Repositories\XYZRepository');
}