Делаю мок S3 клиента для тестового окружения.
services.yaml:
services:
App\Service\S3Client\S3ClientInterface:
App\Service\S3Client\S3Client:
arguments:
$version: 'latest'
$region: 'us-east-1'
$host: '%env(MINIO_HOSTNAME)%'
$port: '%env(MINIO_INTERNAL_PORT)%'
$accessKey: '%env(MINIO_ACCESS_KEY)%'
$secretKey: '%env(MINIO_SECRET_KEY)%'
when@test:
services:
App\Service\S3Client\S3ClientInterface:
App\Service\S3Client\S3Client:
class: App\Service\S3Client\TestS3Client
Оба класса наследуются от S3ClientInterface:
class S3Client implements S3ClientInterface
class TestS3Client implements S3ClientInterface
В месте, где код падает, зависимость идет на интерфейс:
class DoctrineListener
{
public function __construct(
// ...
private readonly S3ClientInterface $s3Client,
) {
}
В prod/dev режиме все работает нормально. В тестовом окружении получаю ошибку:
In getKernel_Listener_DoctrineService.php line 32:
Cannot instantiate interface App\Service\S3Client\S3ClientInterface
P.S. Кэш чистил. Конструктор в TestS3Client пустой, зависимостей нет.