Laravel 5.7: ошибка Phpunit - вызов функции-члена getBag () для строки - PullRequest
0 голосов
/ 14 сентября 2018

Я тестирую сохранение данных в базу данных.Если пропущены обязательные поля, я выбрасываю исключение и затем перенаправляю с моего контроллера:

try {
            $product = Product::create([
                'name' => $request->name,
                'description' => $request->description,
            ]);

            return redirect('home')->with('success', 'Record has been added');

        } catch(\Exception $e) {

            return redirect()->to('course/create')
                    ->withInput($request->input())
                    ->with('errors', 'Required Fields Not Submitted');
        }

Я хочу проверить перенаправление, есть ли в сеансе ошибки и возвращаются ли переданные исходные данные для заполнения формы,поэтому в моем модульном тесте у меня есть:

$response = $this->post("/courses/", $data);

$response->assertRedirect('/courses/create');
$response->assertSessionHasErrors();
//$response->assertSessionHasAll();
$response->assertHasOldInput();

, но при нажатии assertSessionHasErrors я получаю:

Ошибка: вызов функции-члена getBag () для строки

и при нажатии assertHasOldInput я получаю:

BadMethodCallException: вызов неопределенного метода Illuminate \ Http \ RedirectResponse :: assertHasOldInput ()

чтоВроде проблема?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Я думаю, вам следует использовать метод вызова вместо post

Документы - Вызов маршрутов из тестов

Попробуйтеэто

$response = $this->call("POST", "/courses/", $data);
$response = $this->assertRedirect('/courses/create');
$response = $this->assertSessionHasErrors();
$response = $this->assertHasOldInput();
0 голосов
/ 14 сентября 2018

Сделайте это вместо:

$response = $this->call('POST',  "/courses/", $data);

$response->assertRedirect('/courses/create');
$response->assertSessionHasErrors();
$response->assertHasOldInput();
...