@symfony_php

Страница 512 из 1418
Sergey
20.12.2017
10:03:34
короч, дай просто пример теста где тебе надо что-то из контейнера доставать

Константин
20.12.2017
10:04:26
Да обычный unit тест. Просто не хочу цепочку зависимостей вручную собирать из контейнера. Таких как доктрина например

В данном случае зависимость от моего интерфейса идёт.

Предлагаешь повесить тег на интерфейс, а не интерфейсные сервисы инстанцировать в тестах вручную?

Google
Sergey
20.12.2017
10:06:04
> Да обычный unit тест. конфликт терминологии. Для юнит тестов тебе не нужны контейнеры. Так что это интеграционный тест

Vladislav
20.12.2017
10:06:07
хз, делаю NoopService который подключается в тест энв возвращает то что надо))

Vladislav
20.12.2017
10:06:54
кстати в кодсэпшене они так неплохо наворотили юнит тесты, что они получаются уже как интеграционные

дают подключать какие хочешь модули

Sergey
20.12.2017
10:07:33
кстати в кодсэпшене они так неплохо наворотили юнит тесты, что они получаются уже как интеграционные
ну это предмет отдельной дискуссиии... можно в целом считать это все одним и тем же просто в случае с "интеграционными" падает их ценность за счет отсутствия всякой изоляции

или зависимости тестируемого сервиса?

Константин
20.12.2017
10:12:34
Да, походу конкретно этот тест я так себе написал. Надо было интерфейс мокнуть. Ибо результаты интерфейса не тестируются

Sergey
20.12.2017
10:15:20
Да, походу конкретно этот тест я так себе написал. Надо было интерфейс мокнуть. Ибо результаты интерфейса не тестируются
ну то есть ты настоящие зависимости прокидываешь и хотел доставать их из контейнера?

Константин
20.12.2017
10:16:30
В данном случае я простов весь сервис достал из контейнера и проверяю его методы)

Sergey
20.12.2017
10:17:10
интеграционный тест короче... ну ждем пока можно будет в test окружении элиасы объявлять для такого

Google
Константин
20.12.2017
10:17:49
Но это не правильно я же говорю. Я проверяю логику только самого сервиса, мне не важной какой результат ему вернёт сервис от которого он зависит

Более того, если завтра там будет сервис гуляющий во внешний API, мой CI сервер устроит туда ddos

Sergey
20.12.2017
10:18:53
угу) но не забывай что хорошая мысль - мокать только те вещи которые принадлежат тебе

Константин
20.12.2017
10:19:17
да, это мой интерфейс

Хотя с другой стороны

Мне же ничего не мешает в services_test.yaml объявить пустую реализацию как алиас интерфейса

Придётся только эту пустую реализацию в код добавлять

Sergey
20.12.2017
10:21:10
ну я хз что ты проверяешь и как тесты пишешь, я бы туда стабы запихнул

ну то есть через prophet какой

если уж "юнит" (то есть изолированные тесты) то не стоит их на контейнер завязывать

с другой стороны у тебя выбора может не быть))

Константин
20.12.2017
10:22:29
Ну в первом варианте я мокаю интерфейс, создаю сервис и тестирую. Во втором я делаю алиас интерфейса на стаб в тест енв и в тестах просто беру из контейнера готовый сервис ничего сам не создавая

Константин
20.12.2017
10:23:54
Ну эта заглушка может не только в одном тесте нужна. С другой стороны, вдруг в другом тесте надо чтобы заглушка что-то вернула нужное тесту

Vladislav
20.12.2017
10:27:14
кроме заглушки и конфигов ;)
крч ставлю я походу imaginary ))

Sergey
20.12.2017
10:29:22
Ну эта заглушка может не только в одном тесте нужна. С другой стороны, вдруг в другом тесте надо чтобы заглушка что-то вернула нужное тесту
и мы плавно переходим к тому что $dep = $this->prophesize(Dependency::class); $dep->getSomething($id)->willReturn($something); $testing = new TestingClass($dep->reveal());

как-то проще чем готовить фикстуры

Bohdan
20.12.2017
10:30:34
@fes0r а ты json schema использовал?)

Sergey
20.12.2017
10:31:06
да

у меня json schema генерилась из api blueprint

Google
Sergey
20.12.2017
10:31:40
по ним я пробовал генерить правила валидации для symfony/validator

(с парочкой своих рулов например - anyOf

Bohdan
20.12.2017
10:32:49
я хочу их использовать в качестве общей валидации для форм (не генерации оных) приделать на беке https://github.com/justinrainbow/json-schema

Bohdan
20.12.2017
10:33:55
и на фронте обертку над vue+vuelidate вопрос собственно в том, стоит ли сервить сами схемы как файлы? или вторая идея - хранить их в ФС и загружать для фронта вебпаком, а для бекенда - использовать симлинк или чет такое

Sergey
20.12.2017
10:34:05
phpunit не тоже самое делает?)
это как раз таки пример под phpunit

и это не он делает а "пророк"

он как-то удобнее

Bohdan
20.12.2017
10:35:11
о, круто пакеты лиги классные, но найти их не всегда можно)

он подразумевает все же сервинг схем, походу

Sergey
20.12.2017
10:49:18
что значит "сервинг схем"?

вообще в том же api-platform как раз таки для этих целей схема ресурса описывается

Alexey
20.12.2017
10:50:58
А что тогда делать с этим?)
в шторме есть плагин DynamicReturnType, можно его использовать

Константин
20.12.2017
10:52:48
в шторме есть плагин DynamicReturnType, можно его использовать
Ну такое себе. Интерфейс же другое возвращает

Sergey
20.12.2017
10:53:18
Ну такое себе. Интерфейс же другое возвращает
интерфейс ничего не возвращает - он же интерфейс. И тебе не надо знать о конкретном типе, это ж суть интерфейсов

Alexey
20.12.2017
10:54:06
Значит они не совсем корректно интерфейс заюзали

Sergey
20.12.2017
10:54:50
Значит они не совсем корректно интерфейс заюзали
да, ObjectManager это совсем не то же самое что EntityManagerInterface

Google
Sergey
20.12.2017
10:55:18
но оно не то что "не правильно" - с точки зрения иерархии типов все хорошо

Константин
20.12.2017
10:55:27
Тут внезапно на алиас нельзя навесить тег...

Bohdan
20.12.2017
10:55:51
что значит "сервинг схем"?
выдачу их через http просто у меня был второй вариант - не делать их доступными наружу и использовать только через загрузку файлов хотя я уже нашел, что лоадеры там любые есть

Alexey
20.12.2017
10:56:17
Если интерфейсы выполняют разные функции, то стоит их разделить, а не наследовать, все же

Admin
ERROR: S client not available

Sergey
20.12.2017
10:56:48
Если интерфейсы выполняют разные функции, то стоит их разделить, а не наследовать, все же
если у тебя один интерфейс расширяет другой - то можно и просто расшрить. Но вообще - доктрина хороший пример нарушения ISP

Константин
20.12.2017
10:57:53
ну как бы да)
А чё делать? Сервис в контейнере получит алиас, и если алиас изменится тесты будут тестировать совсем другое

Vladislav
20.12.2017
10:58:00
типа жирный ЕМ?

Константин
20.12.2017
10:58:40
Сейчас речь о Money/Currencies интерфейсе. Может его тупо публичным сделать

Константин
20.12.2017
11:05:24
Boris
20.12.2017
11:05:28
Привет всем, подскажите в какую сторону копать? Symfony 3.3, есть DoctrineEventSubscriber - все работает отлично, но как только я решаю пробросить в него репозиторий, сразу ловлю Circular reference detected

Shmaltorhbooks
20.12.2017
11:07:20
либо пересматривать иерархию, либо костылить и прокидывать в него весь контейнер

слушатели событий добавляются в доктрину при её инициализации. но чтоб создать слушателя - в него надо пробросить репу но чтоб создать репу - нужна созданная доктрина

вот тебе и циклическая ссылка

Google
Sergey
20.12.2017
11:08:34
репозиторий тоже зависит от entity manager

Boris
20.12.2017
11:09:18
В итоге тогда самый простой путь в данный момен это дернуть репо из LifecycleEventArgs

Shmaltorhbooks
20.12.2017
11:10:49
да, там em приходит

Shmaltorhbooks
20.12.2017
11:11:14
самый простой - это контейнер пробросить внутрь слушателя

но это путь слабых духом)

Boris
20.12.2017
11:11:21
или отказаться от doctrine event subscriber)
Ага и чем его тогда заменить?)

Alexander
20.12.2017
11:11:24
В ServiceSubscriberInterface должны быть только FQCN названия сервисов? Нельзя подписаться на, к примеру, doctrine_mongodb?

Sergey
20.12.2017
11:12:40
Ага и чем его тогда заменить?)
стоит начать зачем тебе оно вообще понадобилось

Boris
20.12.2017
11:15:15
стоит начать зачем тебе оно вообще понадобилось
Есть таблица в БД. У таблицы только одна строка может быть с значением default = true. Мне прилетает в API строка, нужно проверить если прилетевшая default = true && deleted = false то назначить прилетевшую дефолтной.

Вот придумал повесить событие и проверять т.к. доступа к actionCreate, actionUpdate нет.

Vladislav
20.12.2017
11:15:55
https://github.com/doctrine/DoctrineBundle/issues/389

стоф пишет юзай em

Sergey
20.12.2017
11:17:39
да, при такой ситуации не вижу ничего страшного что бы em юзать

Boris
20.12.2017
11:17:58
Спасибо за советы

Константин
20.12.2017
12:11:28
@fes0r Money/MoneyFormatter это сервис, он зависит от Money/Currencies. Почему бы им не быть сервисами?

Страница 512 из 1418