Size: a a a

2021 August 04

АА

А А in symfony
рано) табличек все еще не видно в бд
источник

✨Basic_Instinct✨ in symfony
ищи)
источник

АА

А А in symfony
в докере же?
источник

✨Basic_Instinct✨ in symfony
да, докерБД называется)
источник

КА

Ключко Александр... in symfony
Там не класс должен быть, а id. Кроме того в services_test нужно сделать сервис публичным
источник

ПГ

Павел Г. in symfony
class в вопросе у меня и есть FQN, публичным делал.
источник

ПГ

Павел Г. in symfony
Короче должно так работать, надо ковырять в чем причина?
источник

VM

Volodymyr Melko in symfony
публичный сервис это чуть другое
публичный сервис ты можешь руками достать из контейнера через $contaner->get(...)

если сервис не публичный, то достать его так нельзя, он только в автовайринге юзается
источник

КА

Ключко Александр... in symfony
Я ж его чисто для мока и делаю публичным только для test env
источник

VM

Volodymyr Melko in symfony
я делал враппер, например мне надо мокать какой-то апи клиент
class TestApiClient implements ApiClientInterface {
   public ApiClientInterface $wrapped;

   public function someApiMethod() {
        $this->wrapped->someApiMethod();
   }
}


и потом в тесте делал так
$mock = $this->createMock(ApiClientInterface::class);
// configure mock

$wrapper = $client->getContainer()->get(TestApiClient::class);
$wrapper->wrapped = $mock;
источник

VM

Volodymyr Melko in symfony
на сколько я помню, то сервисы нельзя сетить, потому что надо тогда пересобирать весь граф зависимостей
то что ты поменял сервис в контейнере не значит, что в уже собранных сервисах эта зависимость поменяется, их нужно все пересобирать тогда
источник

VM

Volodymyr Melko in symfony
но я давно не работал с симфой, может что и путаю уже
источник

КА

Ключко Александр... in symfony
$container = static::$container;

$fetcherMock = $this->getMockBuilder(
CommentFetcher::class)
   ->disableOriginalConstructor()
   ->onlyMethods(['fetch'])
   ->getMock();

$fetcherMock
   ->method('fetch')
   ->withAnyParameters()
   ->willReturn($result);

$container->set('App\Component\
Comment\CommentFetcher', $fetcherMock);
источник

КА

Ключко Александр... in symfony
плюс App\Component\Comment\CommentFetcher делаю публичным в services_test.yaml
источник

КА

Ключко Александр... in symfony
и работает как надо
источник

ПГ

Павел Г. in symfony
Понятно, спасибо за пример! Я просто через клиент делаю, надо будет кишки тогда поковырять раз ваш пример работает
источник

КА

Ключко Александр... in symfony
может я нарушаю какие-то правила симфы, хотел бы услышать ))
источник

AD

Andrey Dembitskyi in symfony
Это ок.

Только можно наступить на грабли, если вдруг сервис что нужно заменить, будет инстанциирован на момент выполнения этого кода.
Тогда не сработает.
источник

ПГ

Павел Г. in symfony
Хм может у меня в этом проблема...
источник

КА

Ключко Александр... in symfony
Да, с таким сталкивался, и приходилось писать более узкие тесты, для каждого случая со своим конкретным моком
источник