Laravel Custom FormRequest в PHPUnit env - PullRequest
       70

Laravel Custom FormRequest в PHPUnit env

4 голосов
/ 18 июня 2020

Хорошо, я некоторое время пытался найти решения о том, как и почему это происходит, вот оно.

В производственной среде этот фрагмент кода работает нормально.

public function store(Add $request) {
        $data = $request->validated();
        //....  some other stuff
}

Add - это класс, который расширяет Illuminate\Foundation\Http\FormRequest, у него есть только некоторые правила (которые я проверил и не влияет на ошибку, потому что не публикуется)

В моей тестовой схеме у меня есть пара сценариев ios, в основном тестов Acceptence, чтобы убедиться, что все создано (или нет) в соответствии с различными входными данными. Они выполняют такие вызовы, как $this->call($uri, $body, $headers), и они работают, как ожидалось, имитируя производственную среду.

Однако я пытаюсь написать спецификацию теста c в контроллер, и он продолжает выдавать мне эту ошибку :

$userController = new UserController();
$request = Add::create('/test', 'POST', $body);
$userController->store($request);

Это выводит ошибку:

 Error: Call to a member function validated() on null
 vendor/laravel/framework/src/Illuminate/Foundation/Http/FormRequest.php:188

Я пытался вывести то, что возвращает dd($request->validated());, но здесь происходит сбой.

  1. Какое решение?
  2. Почему это происходит?

1 Ответ

0 голосов
/ 19 июня 2020

При создании нового экземпляра запроса для некоторых свойств установлено значение null, вам нужно будет самостоятельно заполнить container, redirector и validator, прежде чем вы сможете правильно использовать запрос в контроллере.

Примерно так должно работать:

$userController = new UserController();

// create the request and set the container and redirector
$request = Add::create('/test', 'POST', $body)
    ->setContainer($this->app)
    ->setRedirector($this->app['redirect']);

// resolve the validator
$request->validateResolved();

$userController->store($request);
...