Ошибка запуска PHPUnit в Laravel 5.8 с PHP 7.2 - PullRequest
0 голосов
/ 01 июля 2019

Я пытался настроить мою среду Laravel и Docker с покрытием кода PHPUnit. Я должен был установить Xdebug, который был проблемой в заднице с таким большим количеством различных обучающих программ, и большинство из них устарело или не работает. Теперь, когда я наконец установил Xdebug при попытке запустить свои модульные тесты с vendor/bin/phpunit, я получаю вывод:

Declaration of Illuminate\Foundation\Auth\VerifiesEmails::show(Illuminate\Http\Request $request) should be compatible with App\Http\Controllers\Controller::show($id)"

И мои юнит-тесты больше не работают. При поиске около кажется, что это проблема обновления PHP до 7.2 , что странно, потому что мой env уже собран в php-7.2.

Я попытался запустить composer update безуспешно и ничего не нашел об этой проблеме.

PHP 7.2.19 Laravel версия 5.8.26 PHPUnit версия 7.5.13

мой Dockerfile:

FROM php:7.2-alpine as web

RUN apk add --no-cache \
 openrc \
 curl \
 nodejs \
 nodejs-npm \
 npm 

RUN apk add --no-cache $PHPIZE_DEPS \
    && pecl install xdebug-2.6.0beta1

RUN printf "xdebug.remote_enable=1\n" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
         "xdebug.coverage_enable=1\n" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
         "xdebug.idekey=\"PHPSTORM\"\n" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
         "xdebug.remote_port=9000\n" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
         "xdebug.remote_host=host.docker.internal" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini

RUN docker-php-ext-enable xdebug 

RUN curl -sS https://getcomposer.org/installer | \
 php -- --install-dir=/usr/bin/ --filename=composer

# An IDE key has to be set, but anything works, at least for PhpStorm and VS Code...
ENV XDEBUG_CONFIG="xdebug.idekey=''"

EXPOSE 80

обновление: мое приложение \ Http \ Controllers \ Controller.php

use App\Services\Service;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
class Controller extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
    public function index(Request $request)
    {
        return response()->json([
            'message' => __('messages.list'),
            'data' => $this->service->all($request->all())
        ],200);
    }

    public function show($id)
    {
        return response()->json([
            'message' => __('messages.list'),
            'data' => $this->service->find($id)
        ], 200);
    }
}

Обновление: проблема и решение

Мой Controller.php наследуется другими моими контроллерами (например, UserController, CaveController), но он также наследуется Illuminate\Foundation\Auth\VerifiesEmailsController.php и также имеет метод show(). Для исправления я удалил свои методы Resource из Controllers.php (например, show, index и destroy) и создал ResourceController.php, наследующий Controller.php с моими методами ресурсов. С этим я могу наследовать show() от ResourceController.php в моем UserController, CaveController .....

...