Проблема с доступом к методам через цепочку наследования.
Имеется следующая иерархия
Треит
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 запускать. ПОлучаю одинаковую ошибку.