artem
ВАпрос. Есть у кого дока по настройке xdebug для макос под 7.4? Вроде все поставил, в шторме всё настроил, но через постмен не пробьюсь
Daria
artem
artem
Сорри) просто не пойму почему когда ты настраиваешь линуху все намного проще
Anonymous
Привет! Тут есть боги тестов? )))
Kirill
Юнит?
Anonymous
да
Kirill
Давай ближе к делу
Anonymous
Есть событие и подписчик. В контроллере подключается событие.
Наверное тут подойдет юнит-тест.
Необходимо проверить, что событие случается при вызове контроллера и в подписчике формируется некий набор данных, надо проверить их корректность.
Сергей
Это не юнит
Anonymous
может, только начал изучать
Anonymous
сейчас для меня они на одно лицо
Anonymous
1 условно
контроллер
public function index(): Response
{
$this->eventDispatcher->dispatch(new EnyEvent(.....));
return $this->render('home_page/index.html.twig', [
'controller_name' => 'HomePageController',
]);
}
Anonymous
2 подписчик
подписчик
public function enyMethod(EnyEvent $event)
{
// формируется массив данных
}
Сергей
Юнит - это если ты проверяешь, что событие вызывается. Можешь проверить его аргументы на соответствие.
В отдельном тесте тестируешь подписчика.
Anonymous
значит первый это юнит
Anonymous
а второй?
Сергей
но контроллеры юнитами не тестируют обычно) Для этого функциональные тесты
Anonymous
> Юнит - это если ты проверяешь, что событие вызывается.
но контроллеры юнитами не тестируют обычно)
я запутался )
Сергей
Функциональный - это имитация действий пользователя. Обращаешься к контроллеру, проверяешь всякие коды ответа и т.д
Юниты - проверка бизнес-логики, отдельных методов
Сергей
Можно и на контроллер юнит повесить, но лучше событие вынести в отдельное место и уже это место протестировать
Anonymous
понял, тогда получается первый случай это функциональный, те пользователь обращается к контроллеру, мне надо понять, отработало событие
Anonymous
я не понимаю, как понять, что оно отработало )
Anonymous
тут только соотвествие данных проверяется
Сергей
Anonymous
Anonymous
так с чего начать?
Сергей
если до рендера дошло, значит отработало
А результат этого события тестируешь уже в тесте самого обработчика
Anonymous
ясно, у меня апи, там нет рендеринга ) но в ответе нет данных о результатах события, там подписчик свое дело делает
Сергей
Короче, в контроллере тебе обработчик тестировать не надо. Надо диспетчер заменить моком и проверить что он был вызван.
Anonymous
а как проверить, что он был вызван
Сергей
$this->eventDispatcher->expects(static::once())->method('dispatch')->with(...)
Юра
В симфе можно заменить любой сервис
Anonymous
спасибо
Юра
Напиши свой врапер для диспатчера
Сергей
$this->eventDispatcher = $this->createMock(EventDispatcherInterface::class);
Юра
Пишешь комппйлер пас, находишь дефинишен сервиса, меняешь ему класс
Anonymous
а с подписчиком, как его проверить?
Юра
Лтгируешь выховы подписчиков
Юра
И увидишь вызвался или нет подписчик
Юра
В какую-то статическую переменную
Anonymous
Юра
Вот нашел может подойдет
Юра
https://packagist.org/packages/tweakers/symfony-service-mock
Юра
Ну вон пакет выше
Юра
Замени нужный сервис и всё
Юра
Или читай доку про service container, compiler pass, definition object
Юра
https://symfony.com/doc/current/service_container/service_decoration.html
Юра
Можно так еще попробовать
Юра
Но в этом случае я так понимаю тебе надо будет вручную все методы прокинуть в декрориуемый сервис
Юра
А тот пакет делает это сам
Юра
Постигнешь это искусство сможешь любые тесты писать
Anonymous
мне пакет не даст тимлид поставить )
Андрей
В дев секцию даст
Кот.
Всем привет, есть ссылки на гите с примерами работы с разными микросервисами, кто как реализует и работает с ними ?
Заранее большое спасибо ))
Maxim Kainov
Кот.
Что именно не понятно?
Хочу посмотреть как правильно реализовывать работу с сервисами, что использовать в случаях grpc, rest api и например html и как это должно грамотно выглядеть (переучиваюсь с битрикса)))
Maxim Kainov
Юра
Я работал в большом проекте где было много сервисов. Там юзали ребит для передачи сообщений
Юра
Типо надежно
Кот.
Юра
Rabbitmq
Юра
Но это не панацея просто один из способов
Кот.
Anonymous
Кот.
Roman
namespace app\controllers;
Roman
вот это бьет не так
Roman
как минимум
/*
Roman
поглядел код - вообще все не так 🙂
Roman
мне кажется, этот вопрос вчера уже тут был
Roman
каша какая-то в голове у того, кто код писал
/*
не такой был