Задать вопрос
@domanskiy

Как решить проблему иерархии наслодования классов при тестирования методов?

Проблема с доступом к методам через цепочку наследования.

Имеется следующая иерархия
Треит
treit GetValidationRules
в котором реализован метод private function validateRequest
private function validateRequest(Request $request): void
    {
        $rules = with(new static)->getValidationRules($request);
        $messages = with(new static)->getValidationMessages();
        $request->validate($rules, $messages);
    }

Класс
class BaseModel extends Model
BaseModel импортирует треит

Класс MyDodel расширяет класс BaseModel
class MyDodel extends BaseModel
Тут реализованы методы используемые в треите:
private function getValidationRules(Request $request): array
    {
        return [
            'anyField' => 'integer|nullable',
]
};

И
private function getValidationMessages(): array
    {
        return [
            'anyField' => trans('svr-core-lang::validation'),
]};


Вся эта конструкция прекрасно работает в ларавеле.
Но я решил написать тест на метод validateRequest.
Он приватный. Это решается через ReflectionClass
Проблема:
При запуске теста, возникает ошибка:
BadMethodCallException errors: Call to undefined method Models\MyDodel::getValidationRules()


Если, я импорт треитов переношу из BaseModel в MyDodel, то тест работает как надо.
Модели и треиты в разных пакетах вендора находятся. НеимСпейсы прописаны. В приложении всё работает. Не работает только при тестах (
Как решить данную проблему? Может както хитро нужно в autoload.php phpunit.xml composer.json что-то прописать?
Тесты пробовал через phpunit и через artisan запускать. ПОлучаю одинаковую ошибку.
  • Вопрос задан
  • 66 просмотров
Подписаться 1 Средний 7 комментариев
Пригласить эксперта
Ваш ответ на вопрос

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

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