Павел
Вам шашечки или ехать?
Просто такие тесты (с БД) дольше и надо подготавливать БД. Поэтому тестирование через юнит какой то узкий фнукионал - профитнее, быстрее, проще, понятнее. Но сначало надо написать так, чтобы это можно было красиво юнит-тестировать. А не обложиться моками
Павел
Например у вас есть код и в нем 10 ифов перед попаданием в базу. Вот лучше написать код так, чтобы было 9-10 юнитов и 1 интеграционный с БД, а не 10 интеграционных :)
Павел
А как тестишь приватные кстати?)
Тестить приватные - бэд практика.
Павел
Мы посылаем что то на вход и ожидаем что то на выход, нет смысла тестировать какие то отдельные внутренние куски. Если они требуют отдельного тестирования, возможно требуется декомпозиция
Павел
Тестирование приватных методов ведет к хрупкости тестов
Alexey Mishurovskiy
Согласен.
Юра
По факту он льет фикстуры и прочее в бд, а после тестов стирает. А нет способа обойтись без бд?
По-моему это делает какой-то плагин для пхп юнита, а не из коробки
Юра
Убери плагин и не будут фикстуры никуда заливаться
Павел
Возможно еще что то в бутстрапе phpunit,а. Лично я про такой плагин не слышал, но чего только нет :)
Павел
Да, из коробки ничего автоматом не делается
Kirill
По факту он льет фикстуры и прочее в бд, а после тестов стирает. А нет способа обойтись без бд?
Ну подними sqlite коннекшн в памяти. Если никаких сложных штук нет, то должно сработать
Kirill
Но для интеграционных тестов всё равно нужна база нормальная
Kirill
А добавить докер образ базки в гитлаб - дело пары минут, кстати
Max
Несомненно. Дело в концепции юнит тестов. Похоже, что некоторые из них я не правильно написал
Alexey
Всем привет! Что-то я с dependency injection в symfony 5 никак не могу разобраться, есть 2 сервиса с одним классом (но разными параметрами): db1: class: App\Db #params: 1 db2: class: App\Db #params: 2 Раньше их получал через $container->get('db1'); // or "db2" но теперь это не работает, всякие autowire на входе хотят именно App\Db, getSubscribedServices аналогично. Как же внедрять такие сервисы?
Vlad
через контейнер получать сервисы такая себе затея
Vlad
но если сильно хочется сделай public: true у сервиса
Alexey
итак public: true, и дальше что же делать? через container->get все равно недоступны
Vlad
кэш грел?
Alexey
да
Vlad
как греешь?
Alexey
т.е. кроме как создание класса типа class Db2 extends DB {} ничего не сделать в 5 ?
Vlad
зачем так делать
Vlad
указал id сервиса и погнали
Павел
db1: class: App\Db #params: 1 db2: class: App\Db #params: 2 class1: attributes: $db: '@db1' class2: attributes: $db: '@db2'
Alexey
хм... class1 и class2 могут быть несуществующими?
Павел
db1: class: App\Db #params: 1 db2: class: App\Db #params: 2 wraper1: class: App\DbWraper attributes: $db: '@db1' wraper2: class: App\DbWraper attributes: $db: '@db2'
Павел
хм... class1 и class2 могут быть несуществующими?
Не совсем понятно, что значит не существующий класс
Павел
У вас App\Db не существует? А что это такое
Alexey
App\Db: class: App\Db #params: 1 вот такое работает, класс App\Db существует и это можно юзать в DI, но если будет так: db2: class: App\Db #params: 2 то получается что в контроллеры протаскивать это только если определять контроллеры как сервисы и через аттрибуты?
Павел
Ну надо будет как то указать где db1, а где db2 тащить. Если не указать, он вроде будет вообще дефолтный App\Db тащить, а не один из ваших сконфигурированных
Павел
Еще вариант через биндинг
Alexey
ну т.е. получается в 5 это пока никак не сделать?
Павел
ну т.е. получается в 5 это пока никак не сделать?
Ну поидее можно сконфигурировать контролерры, но я не пробовал))
Павел
ну т.е. получается в 5 это пока никак не сделать?
Можете сделать $db1 и $db2 бинды на сервисы
Павел
И использовать эти переменные в контроллерах
Павел
Должно выйти
Alexey
а что такое бинды ))
Павел
а что такое бинды ))
https://symfony.com/doc/current/service_container.html#binding-arguments-by-name-or-type
Alexey
Через конструктор делайте
А можно пример как это сделать именно для именованных сервисов?
Alexey
похоже что легче всего это решить через класс-пустышку, который наследуется от основного класса
Nikolay
А можно пример как это сделать именно для именованных сервисов?
Просто аргументом указываете в конфиге и все
Alexey
аргументом... это кучу контроллеров надо конфигурировать, они же по умолчанию...
Павел
Просто аргументом указываете в конфиге и все
Правда если юзается много где, замучаешься конфигурировать
Nikolay
Правда если юзается много где, замучаешься конфигурировать
Лучше так, чем тянуть из контейнера, когда тем более уже 5 версия
Павел
Лучше так, чем тянуть из контейнера, когда тем более уже 5 версия
Ну варианг с биндингом скользкий но более удобный
Alexey
в c# конечно такое сразу более продуманно сделано... эх
Павел
Но все лучше чем тащить из контейнера - соглашусь)
Nikolay
Ну варианг с биндингом скользкий но более удобный
Это только для контроллера работает вроде
Павел
Биндинг везде работает
Nikolay
Биндинг везде работает
Просто только для контроллера пользовался, для другого не было нужды
Alexey
всем спасибо, 3 варианта решения есть, 2 из них конечно костыли, но попроще будут )
Елнур
Ivan
Всем привет! Никто не сталкивался с проблемой в работе сессий Symfony+RoadRunner? Если один instance с одним worker, то всё работает. Иначе - проблема, сессия теряется, создается новая.
Павел
https://stackoverflow.com/questions/53556134/symfony-autowire-multiple-services-same-class
Докину доки https://symfony.com/doc/5.4/service_container/autowiring.html#dealing-with-multiple-implementations-of-the-same-type
Ivan
они уже там
Алексей
Добрый день, php 8.1, симфони 5.4 , роуты описываются атрибутами проблема с NelmioApiDocBundle, не добавляются роуты в документацию. Т.е. создаю роут, пишу что-то типа: `#[Route('/api/v2/registration/sms/check', name: 'v2_post_check_send_code', methods: ['POST'])] #[Tag(name: 'Sms')]` и его нет. Когда то сталкивался что при ошибках в описании роута, именно этот роут не выводился. Но куда здесь копать, ума не приложу
Алексей
дополню: часть роутов старых выводится, новые однозначно нет
Null
Добрый совет - выброси этот бандла. Пиши доку ямлом.
Алексей
Добрый совет - выброси этот бандла. Пиши доку ямлом.
на будущее помечу отрефакторить. А какие варианты, что можно сейчас сделать ?
Null
Посмотри там где то есть фильтр роутов
Null
path_patterns
Null
Может у тебя регулярка шибко ядреная там и под нее не подпадают определенные роуты
Алексей
зараза... в яблочко, спасибо
Null
Да пожалуйста)
Null
Сам на эти грабли прыгал
Null
Пока не понял, что бандл бесполезен
Nikolay
Пока не понял, что бандл бесполезен
Если что там есть пакет на котором он работает, swagger-zircote, сам пакет нормальный, а бандл не очень да
Null
Я ямл пишу и запускаю через свагер уи
Null
Потому что в виде атрибутов это писать крайне неудобно
Nikolay
Потому что в виде атрибутов это писать крайне неудобно
Если небольшой объем, то ещё можно, но иногда когда много согласен, что не очень удобно
Vlad
Потому что в виде атрибутов это писать крайне неудобно
а я не пишу аттрибуты, они сами пишутся