Всем привет. Пишу системные тесты (Symfony + PHPUnit) и использую

транзакцию 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

10 ответов

24 просмотра

А че в тестах не делать синхронный транспорт? В своём проекте в тест окружении делаю sync:// для асинхронных транспортов До этого работал в проекте, где был самопис, но тоже перемычку делали… дабы не париться

Максим Федоров
А че в тестах не делать синхронный транспорт? В с...

Гораздо логичнее вообще использовать inMemory:// транспорт в тестах, кроме е2е, разве нет?

Максим Федоров
А че в тестах не делать синхронный транспорт? В с...

а потом ловить баги что кто-то завязался на то что все синхронно)

Sergey P
а потом ловить баги что кто-то завязался на то что...

Не вижу описанных вами рисков, что ходило синхронно — выполнится Что было отдельным каналом и сидело за выполнением команды — выполнится

Максим Федоров
Нет, смысл?

Чтобы отдельно тестить компоненты, например.

Максим Федоров
Не вижу описанных вами рисков, что ходило синхронн...

Мне кажется Сергей имел ввиду тот момент, что если события А и Б должны выполнится строго последовательно, то в тестовом окружении, где sync, они так и выполнятся. А на проде с асинком - не факт. И тут нужно уточнить что этот функционал может писать не один человек а несколько. Т.е. первый написал транспорт, с второй его использует, и при использовании на доглядел/не читал описание что команды на прод выполняются асинхронно и пошел писать синхронной код. И эта бага на тесте не вылезет.

возьмите этот свежий пакет https://github.com/zenstruck/messenger-test там можно ловить сообщения, вешать ассерты к очередям или сообщениям, можно процессить на лету крч удобно, просто в тест-среде нужно определить трансопрт как test://

Похожие вопросы

Обсуждают сегодня

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
Коллеги, может знает кто, можно ли цвет бейджа счётчика в BackendMenu менять без бубнов?
Alex Blaze
3
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Привет!) Кто как юзает переменные в строках?) Чисто ради интереса Вот так: echo "У меня {$bananasAmount} бананов"; Или вот так: echo "У меня ${bananasAmount} бананов";
Виталий
3
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
разработчик ботов скидывает портфолио, боты которые он уже создал. А вот как узнать что это именно он их создал?
Gosudar
4
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Карта сайта