Имитация красноречивого метода сохранения() Laravel

#laravel #testing #eloquent #model

Вопрос:

Представьте, что у вас есть контроллер или какой-то код, который выглядит примерно так:

 <?php

namespace AppHttpControllers;

use IlluminateHttpRequest;
use IlluminateHttpJsonResponse;

class TeamController {

    public function create(Request $request): JsonResponse
    {
        $request->validated();

        $team = new Team(['name' => $request->get('name')]);
        if (!$team->save()) {
            // some really important logic you want to cover
            // cover by a test.
        }

        ...
    }

}
 

Вы не можете легко высмеять Красноречивую модель, не будучи немного запутанным, см. Мой ответ о том, как вернуть false из вызова save ().

Ответ №1:

В своем тесте просто позвоните:

 Team::saving(fn () => false);
 

и ваш вызов функции save() теперь вернет false, что позволит вам покрыть этот поток кода.