Max
Павел
Вам шашечки или ехать?
Просто такие тесты (с БД) дольше и надо подготавливать БД. Поэтому тестирование через юнит какой то узкий фнукионал - профитнее, быстрее, проще, понятнее. Но сначало надо написать так, чтобы это можно было красиво юнит-тестировать. А не обложиться моками
Alexey Mishurovskiy
Павел
Например у вас есть код и в нем 10 ифов перед попаданием в базу.
Вот лучше написать код так, чтобы было 9-10 юнитов и 1 интеграционный с БД, а не 10 интеграционных :)
Alexey Mishurovskiy
Павел
Мы посылаем что то на вход и ожидаем что то на выход, нет смысла тестировать какие то отдельные внутренние куски. Если они требуют отдельного тестирования, возможно требуется декомпозиция
Павел
Тестирование приватных методов ведет к хрупкости тестов
Alexey Mishurovskiy
Согласен.
Юра
Юра
Убери плагин и не будут фикстуры никуда заливаться
Павел
Возможно еще что то в бутстрапе phpunit,а. Лично я про такой плагин не слышал, но чего только нет :)
Павел
Да, из коробки ничего автоматом не делается
Kirill
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'
Павел
У вас 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 это пока никак не сделать?
Павел
Павел
И использовать эти переменные в контроллерах
Павел
Должно выйти
Alexey
а что такое бинды ))
Павел
а что такое бинды ))
https://symfony.com/doc/current/service_container.html#binding-arguments-by-name-or-type
Nikolay
Alexey
похоже что легче всего это решить через класс-пустышку, который наследуется от основного класса
Nikolay
Alexey
аргументом... это кучу контроллеров надо конфигурировать, они же по умолчанию...
Павел
Alexey
в c# конечно такое сразу более продуманно сделано... эх
Павел
Но все лучше чем тащить из контейнера - соглашусь)
Nikolay
Павел
Павел
Биндинг везде работает
Alexey
всем спасибо, 3 варианта решения есть, 2 из них конечно костыли, но попроще будут )
Ivan
Всем привет! Никто не сталкивался с проблемой в работе сессий Symfony+RoadRunner? Если один instance с одним worker, то всё работает. Иначе - проблема, сессия теряется, создается новая.
Елнур
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
Пока не понял, что бандл бесполезен
Null
Я ямл пишу и запускаю через свагер уи
Null
Потому что в виде атрибутов это писать крайне неудобно
Алексей
Vlad