Size: a a a

2020 April 07

AM

Alexander Makarov in Yii Framework 3
что-то я не подумал что так извратно будет :)
источник

AM

Alexander Makarov in Yii Framework 3
не откатить ли...
источник

AM

Alexander Makarov in Yii Framework 3
1. Без такой обёртки ничего не сконфижить вообще.
2. Обёртка ничего не делает в простейшем случае.
источник

AM

Alexander Makarov in Yii Framework 3
3. В тестах приходится извращаться.
источник

DS

Dmitriy S in Yii Framework 3
Alexander Makarov
1. Без такой обёртки ничего не сконфижить вообще.
2. Обёртка ничего не делает в простейшем случае.
Нужна не анонимная обертка, а класс ProviderConfigurator, если нужно конфижить в рантайме, еще лучше тогда сделать и ProviderConfiguratorInterface, тогда его можно зависимостью затянуть, при этом не будет нарушения интерфейса. А если в контексте yii3 юзать, то есть EventConfigurator в yii-web, ему в метод registerListeners() передаешь конфиг и он добавляет листенеры.
источник

DS

Dmitriy S in Yii Framework 3
Alexander Makarov
что-то я не подумал что так извратно будет :)
Извратно для тех, кто каку делать хочет)
источник

AM

Alexander Makarov in Yii Framework 3
public function testBeforeSend(): void
   {
       $mailer = $this->getMailer();
       $message = $this->createMessage();
       $this->assertTrue($mailer->beforeSend($message));

       /** @var Provider $provider */
       $provider = $this->get(ListenerProviderInterface::class);
       $configurator = $this->getProviderConfigurator($provider);
       $configurator->attach(static function (BeforeSend $event) {
           $event->stopPropagation();
       });
       $this->assertFalse($mailer->beforeSend($message));
       $mailer->send($message);
   }
источник

AM

Alexander Makarov in Yii Framework 3
Вот такой кейс получается с адовым извратом в виде ненужной прослойки configurator
источник

AM

Alexander Makarov in Yii Framework 3
и так будет везде где нужно потестить события
источник

DS

Dmitriy S in Yii Framework 3
4 строчки лишние всего
источник

DS

Dmitriy S in Yii Framework 3
Alexander Makarov
и так будет везде где нужно потестить события
Используй моки
источник

AM

Alexander Makarov in Yii Framework 3
зачем моки?
источник

AM

Alexander Makarov in Yii Framework 3
private function getProviderConfigurator(Provider $provider)
{
   return new class($provider) extends AbstractProviderConfigurator {
       private Provider $provider;

       public function __construct(Provider $provider)
       {
           $this->provider = $provider;
       }

       public function attach(callable $listener, string $eventClassName = ''): void
       {
           $this->provider->attach($listener, $eventClassName);
       }
   };
}
источник

AM

Alexander Makarov in Yii Framework 3
мне как-бы надо событие протестить, а не мок
источник

Д

Дмитрий in Yii Framework 3
Alexander Makarov
зачем моки?
Как зачем?
источник

Д

Дмитрий in Yii Framework 3
Alexander Makarov
мне как-бы надо событие протестить, а не мок
А конфигуратор тогда зачем трогаешь?
источник

AM

Alexander Makarov in Yii Framework 3
потому что без него обработчик не добавить
источник

DS

Dmitriy S in Yii Framework 3
Alexander Makarov
мне как-бы надо событие протестить, а не мок
Ну и замокай диспетчер, который выполнит нужный листенер
источник

Д

Дмитрий in Yii Framework 3
Alexander Makarov
потому что без него обработчик не добавить
Так нужно протестировать обработчик?)
источник

AM

Alexander Makarov in Yii Framework 3
+- да
источник