Как предоставить пространство имен ядра для Codeception для проекта Symfony4

Я тестирую новую структуру каталогов Symfony4 с Coception.

Codeception установлен и настроен. Из-за стратегии конца пакета я знал, что произойдет ошибка, и вот ошибка:

Неустранимая ошибка PHP: необработанная ошибка: класс «ядро» не найден в ...\my_project\vendor\codeception\codeception\src\Codeception\Module\Symfony.php:146

Codeception не находит класс ядра из-за его нового пространства имен, которое является приложением, а не пустым пространством имен.

Ядро теперь находится в каталоге src и объявлено в пространстве имен App.

Новая декларация ядра

источник/Kernel.php

namespace App; // <-- the namespace

[...]

class Kernel extends BaseKernel[...]

Ранее ядро ​​называлось AppKernel и не имело пространства имен:

Старая декларация ядра

приложение/AppKernel.php

<?php

//no namespace

[...]

class AppKernel extends Kernel

Я отредактировал 265-ю строку файла Symfony.php, чтобы изменить эту строку, которая возвращает Kernel:

$class = $file->getBasename('.php');

этой строкой, чтобы вернуть App\Kernel:

$class = 'App\\'.$file->getBasename('.php');

Эта модификация заставляет использовать новое пространство имен новой структуры.

Мои функциональные тесты работают отлично, но я хочу избежать изменений в файле поставщика.

Как я могу принудительно использовать пространство имен приложения без этого хака? Кажется, для этого нет параметра, но могу ли я инкапсулировать кодовое восприятие в пространстве имен приложения или найти хак, чтобы поместить его в свои файлы, а не в файл поставщика?


person Alexandre Tranchant    schedule 04.09.2017    source источник
comment
class_alias('App\Kernel', 'AppKernel'); недостаточно?   -  person Federkun    schedule 04.09.2017
comment
Хорошая идея, но она не работает. Я пытался: я тоже пытался: class_alias('App\Kernel', 'Kernel');, но я обрабатываю эту ошибку: Cannot declare class App\Kernel, because the name is already in use   -  person Alexandre Tranchant    schedule 04.09.2017
comment
Ой, извини ! Оно работает! Я поместил его в два bootstrap.php файла (в каталоге тесты\функционал и тесты) Если я поместил его только в один файл, он, конечно, работает лучше   -  person Alexandre Tranchant    schedule 04.09.2017
comment
Если вы хотите написать свой ответ, я его проверю.   -  person Alexandre Tranchant    schedule 04.09.2017


Ответы (2)


Вы можете создать псевдоним для класса Kernel:

   class_alias('App\Kernel', 'Kernel');
person Federkun    schedule 04.09.2017