транзакцию EntityManagerInterface для тест кейса, однако api-методы, которые используют \Symfony\Component\Messenger\Handler\MessageHandlerInterface падают, потому что доктрина не может сделать autoSetup таблицы для MessageHandler при транзакции и кидает исключение. Есть ли возможность как-то это обойти, ну или переосмыслить подход?
Table 'foo.messenger_messages' doesn't exist in /srv/app/vendor/symfony/doctrine-messenger/Transport/DoctrineSender.php
А че в тестах не делать синхронный транспорт? В своём проекте в тест окружении делаю sync:// для асинхронных транспортов До этого работал в проекте, где был самопис, но тоже перемычку делали… дабы не париться
Гораздо логичнее вообще использовать inMemory:// транспорт в тестах, кроме е2е, разве нет?
а потом ловить баги что кто-то завязался на то что все синхронно)
А какие примеры?
Не вижу описанных вами рисков, что ходило синхронно — выполнится Что было отдельным каналом и сидело за выполнением команды — выполнится
Чтобы отдельно тестить компоненты, например.
В таком случае да
Мне кажется Сергей имел ввиду тот момент, что если события А и Б должны выполнится строго последовательно, то в тестовом окружении, где sync, они так и выполнятся. А на проде с асинком - не факт. И тут нужно уточнить что этот функционал может писать не один человек а несколько. Т.е. первый написал транспорт, с второй его использует, и при использовании на доглядел/не читал описание что команды на прод выполняются асинхронно и пошел писать синхронной код. И эта бага на тесте не вылезет.
возьмите этот свежий пакет https://github.com/zenstruck/messenger-test там можно ловить сообщения, вешать ассерты к очередям или сообщениям, можно процессить на лету крч удобно, просто в тест-среде нужно определить трансопрт как test://
Обсуждают сегодня