Задать вопрос
@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';
    }
}
  • Вопрос задан
  • 854 просмотра
Подписаться 2 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Loftschool
    Комплексное обучение PHP
    6 недель
    Далее
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Skillbox
    Профессия PHP-разработчик с нуля до PRO
    7 месяцев
    Далее
  • Яндекс Практикум
    Фулстек-разработчик расширенный
    20 месяцев
    Далее
  • Специалист.ру
    Профессиональный веб - разработчик на Laravel и React
    8 месяцев
    Далее
  • Onskills
    PHP: базовый курс
    1 месяц
    Далее
  • Skillbox
    PHP-фреймворк Laravel
    2 месяца
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
Sanasol
@Sanasol Куратор тега Laravel
нельзя просто так взять и загуглить ошибку
Ваш ответ на вопрос

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

Похожие вопросы