@plamer

Как лучше писать PHPUnit тесты к restful контроллерам Laravel?

Здравствуйте, прочитал книгу "Разработка через тестирование" Кент Бек. Пытаюсь тренироваться на контроллерах Laravel админ панели. Так как, они у меня Restful и тут смешивается представление с логикой, к примеру "edit" я не могу проверить возвращаемые данные, они передаются сразу в представление. Как лучше протестировать такой метод? Как я понял, TDD плотно базируется на принципах SOLID, а первый принцип гласит "Принцип единственной ответственности", поэтому я думаю, может лучше разделить контроллер на две части: 1. Представление, которое будет принимать данные и передовать в метод view(), 2. Сама логика, с методами create, update, delete, edit. Подскажите пожалуйста как правильно сделать, не хочеться переписывать по 5 раз.
<?php
namespace App\Http\Controllers\Admin;
use Validator;
use Illuminate\Http\Request;
use App\Http\Interfaces\Admin\RestInterface;

class UserController extends AdminController implements RestInterface
{
    public function index()
    {
        $data = [
            'title' => 'Список пользователей'
        ];
        return view('admin.users.list', $data);
    }

    public function show()
    {
        $data = [
            'title' => 'Добавить пользователя'
        ];
        return view('admin.users.single', $data);
    }

    public function edit($id)
    {
        $v = Validator::make(['id' => $id], [
            'id' => 'required|integer'
        ]);

        if($v->fails()){
            return redirect('/', 303);
        }

        $user = $this->repository->getOne($id);

        $data = [
            'title' => 'Пользователь',
            'user' => $user
        ];
        return view('users.admin.single', $data);
    }

    public function create(Request $request)
    {
        $v = Validator::make($request->all(), [
            'name' => 'required|string|max:50',
            'email' => 'required|email|max:30',
            'password' => 'required|string|max:30'
        ]);

        if($v->fails()){
            return response()->json($v->errors());
        }
        $this->repository->create($request->all());
        return true;
    }

    public function update($id, Request $request)
    {
        $v = Validator::make($request->all(), [
            'name' => 'required|string|max:50',
            'email' => 'required|email|max:30',
            'password' => 'required|string|max:30'
        ]);
        if($v->fails()){
            return response()->json($v->errors());
        }
        $this->repository->update($id, $request->all());
        return true;
    }

    public function delete($id)
    {
        $this->repository->delete($id);
        return true;
    }

    public function filter(Request $request)
    {
        $this->validate($request, [
            'name' => 'string|max:30',
            'email' => 'string|max:30'
        ]);
        $filter = $this->repository->filter($request->all());
        return response()->json($filter);
    }

    public function getEntity(){
        return '\App\Entities\Users';
    }
}
  • Вопрос задан
  • 849 просмотров
Пригласить эксперта
Ответы на вопрос 1
Sanasol
@Sanasol Куратор тега Laravel
нельзя просто так взять и загуглить ошибку
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы