
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 который подключается в тест энв возвращает то что надо))

Sergey
20.12.2017
10:06:34

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
Ну в первом варианте я мокаю интерфейс, создаю сервис и тестирую. Во втором я делаю алиас интерфейса на стаб в тест енв и в тестах просто беру из контейнера готовый сервис ничего сам не создавая

Sergey
20.12.2017
10:23:08

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

Vladislav
20.12.2017
10:27:14

Sergey
20.12.2017
10:29:22
как-то проще чем готовить фикстуры

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

Константин
20.12.2017
10:33:03

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

Sergey
20.12.2017
10:34:05
и это не он делает а "пророк"
он как-то удобнее

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

Sergey
20.12.2017
10:49:04

Sergey
20.12.2017
10:49:18
что значит "сервинг схем"?
вообще в том же api-platform как раз таки для этих целей схема ресурса описывается

Alexey
20.12.2017
10:50:58

Константин
20.12.2017
10:52:48

Sergey
20.12.2017
10:53:18

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

Константин
20.12.2017
10:54:12

Sergey
20.12.2017
10:54:50

Google

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

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

Sergey
20.12.2017
10:55:42

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

Sergey
20.12.2017
10:56:10

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

Admin
ERROR: S client not available

Sergey
20.12.2017
10:56:48

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

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

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

Sergey
20.12.2017
11:04:43

Константин
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
либо пересматривать иерархию, либо костылить и прокидывать в него весь контейнер
слушатели событий добавляются в доктрину при её инициализации.
но чтоб создать слушателя - в него надо пробросить репу
но чтоб создать репу - нужна созданная доктрина
вот тебе и циклическая ссылка

Sergey
20.12.2017
11:08:22

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 приходит

Sergey
20.12.2017
11:11:01

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

Boris
20.12.2017
11:11:21

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. Почему бы им не быть сервисами?

Sergey
20.12.2017
12:57:56