Я пытался настроить мою среду 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
.....