
Alex
16.02.2017
07:32:50
понятнее не стало :)

Aleksandr
16.02.2017
07:40:28
ну смотри, есть коллекция уведомлений
в каждом уведомлении хранится множество, в которое записывается кто из пользователей прочел это уведомление
для коллекции пользователей создан метод isRead($user), который возвращает прочитал пользователь $user это уведомление или нет
в методе configureListFields() я пытаюсь в листмэппер засунуть именно этот метод, чтобы он мне вернул да/нет
но естественно он ругается, что я ему не передал параметр $user
сейчас у меня вот такой код $listMapper->add(‘isRead’, ‘boolean’)
все

Google

Aleksandr
16.02.2017
07:45:09
раскурил :)

Alex
16.02.2017
07:50:21
главное - правильно сформулировать вопрос :))

Aleksandr
16.02.2017
07:56:05
да я откопал parameters )

Daniel
16.02.2017
09:05:48
Вопрос по тестированию
Тестируется ли вообще стороннее API?
Как по мне нужно симулировать потенциальные JSON ответы и все их вариации и далее передавать на обработку и проверять, что если когда то придет такой ответ - он должен такое-то отдавать.
По идее если тесты будут запросы слать на чужой ресурс - это же неправильно?

Алексей
16.02.2017
09:12:02
Ну типа того.
Тесты должны быть предсказуемыми.

Rodion
16.02.2017
09:12:52
если это unit-тесты, то они должны быть изолированными от других юнитов.

Pavel
16.02.2017
10:17:54
Как жить без конструктора в сервисах, если через $this->get() вызывается?

Alex
16.02.2017
10:18:26
Припеваючи

Pavel
16.02.2017
10:19:15
Припеваючи
Ну вот мне надо при вызове передать строку, или инт. Выхода кроме как создать метод setString/setInt и юзать его нет?

Sergey
16.02.2017
10:20:38

Google

Sergey
16.02.2017
10:20:48

Alex
16.02.2017
10:21:08

Pavel
16.02.2017
10:21:57

Sergey
16.02.2017
10:23:09
ты эту строку откуда передаешь? из контейнера?

Alex
16.02.2017
10:23:12

Pavel
16.02.2017
10:23:37

Sergey
16.02.2017
10:23:59

Pavel
16.02.2017
10:25:42

Sergey
16.02.2017
10:26:41
тогда не делай этот класс сервисом, а создавай по месту и он будет тебе враппером для твоей страницы с доп методами

Pavel
16.02.2017
10:27:21
Но тогда контроллер будет длиннющим
Ну, относительно

Sergey
16.02.2017
10:29:53
еще есть вариант как предложили выше - фабрика
быстрее реализацию напишу чем обьяснять буду)

Pavel
16.02.2017
10:31:06

Sergey
16.02.2017
10:31:57
<?php
class Aservice
{
}
class Bservice
{
private $a;
private $string;
public function __construct($a, $string)
{
$this->a = $a;
$this->string = $string;
}
}
class Fabric
{
private $a;
public function __construct(Aservice $a)
{
$this->a = $a;
}
public function create($string)
{
return new BService($this->$a, $string);
}
}
главное чтобы фабрика не имела референса на то что создает, иначе GC не сможет почистить их потом

Pavel
16.02.2017
10:38:36
А как сюда DI entitymanager`a впилить, или что-то подобное?

Google

Sergey
16.02.2017
10:42:19
в фабрику его инжектишь
не ну вообще ты можешь напрямую в сервисе поменять проперти. но могут быть кейсы когда ты сервис юзаешь повторно(субреквест, форвард, или вообще из консоли запускаешь), то старое значение может остаться и тогда у тебя будут проблемы
поэтмоу создавать на каждый кейс отдельный обьект более безопасно
ну и если вдруг тебя дернет перейти на языки где есть канкаренси, тебя такой подход спасет миллион раз)

Pavel
16.02.2017
10:45:52
Найс

Sergey
16.02.2017
12:11:38
http://symfony.com/blog/new-in-symfony-3-3-import-config-files-with-glob-patterns
подвезли еще импрувменты

Roman
16.02.2017
12:12:29
норм

Rodion
16.02.2017
12:12:49
это ж теперь можно без геморроя с импортом конфиги делить на директории

Lezhnev
16.02.2017
12:12:57
действительно норм - у меня полконфига в импортах

Sergey
16.02.2017
12:13:27
ага, а то щас примерно такой пиздец
- { resource: services/admin.yml }
- { resource: services/components.yml }
- { resource: services/extensions.yml }
- { resource: services/forms.yml }
- { resource: services/listeners.yml }
- { resource: services/services.yml }
- { resource: services/consumers.yml }
- { resource: services/repositories.yml }
- { resource: services/param_converters.yml }

Lezhnev
16.02.2017
12:13:37
во-во, аналогично
еще и папочка с bundles
- { resource: bundles/old_sound_rabbitmq.yml }

Sergey
16.02.2017
12:15:14
3.3 походу самый жирный апдейт в симфони будет за последние года

Daniel
16.02.2017
12:25:01
Аналогично
Вот есть например такая штука, как LiipFunctionalTestBundle, он разширяет вроде как возможности функционального тестирования.
Есть ли что то подобное для юнит тестирования приложения? Например класс, от которого наследуются тесты для тестирования: Репозиториев, Расширений и т.п.
Вот например сейчас покрываю тестом конфигурацию бандла:
Допустим базовый класс для тестирования репозиториев бы еще создать, чтобы можно было фикстуры прямо из теста загружать, которые хранятся в папке не ORM, а Tests например и при doctrine:fixtures:load не загружаются.
Чтобы все данные Rollback-ались еще изменненые в процессе тестирования

Google

Daniel
16.02.2017
12:30:26
Мож уже сделали такие фишки?
Или бред?

Sergey
16.02.2017
12:31:14
юнит тестирование и репозитории вещи не совместимы)

Daniel
16.02.2017
12:32:45
Окей, как называются тесты, которые тестят репозитории?

Sergey
16.02.2017
12:32:58
интеграционные

Admin
ERROR: S client not available

Daniel
16.02.2017
12:33:01
ВО
Да
Просто для тестирования расширений иногда нужно приводить контейнер в определенное состояние, которое требуется самому расширению:
$this->container->set('kernel', \stdClass::class);
$this->container->set('booker.queue.transactional_runner', \stdClass::class);
$this->container->set('old_sound_rabbit_mq.integration_1c_producer', \stdClass::class);
$this->container->set('booker.queue.transactional_runner', \stdClass::class);

Sergey
16.02.2017
12:40:03
а расширения чего?

Daniel
16.02.2017
12:40:15
Для бандла

Sergey
16.02.2017
12:40:19
и что именно тестируешь?
вообще вот примеры https://github.com/doctrine/DoctrineBundle/blob/master/Tests/DependencyInjection/DoctrineExtensionTest.php#L687

Daniel
16.02.2017
12:44:47
Я тестирую, что:
1)В списке загруженных файлов конфигурации есть имена обязательных файлов
$this->assertContains('connection.yml', $resourceList);
$this->assertContains('manager.yml', $resourceList);
$this->assertContains('publisher.yml', $resourceList);
$this->assertContains('runner.yml', $resourceList);
$this->assertContains('services.yml', $resourceList);
2)Обязательно присутствуют значения по-умолчанию, которые по-умолчанию проставляются на уровне конфигурации бандла, которые необходимы для работы, но их можно и не указывать, но быть они должны.
3)Тест на то, что в контейнер попадают параметры из конфигурации под нужными именами
4)тест на то, что нельзя записать всякое говно в определенную колонку, которая содержит определенный массив допустимых значений

Sergey
16.02.2017
12:47:09

Daniel
16.02.2017
12:49:16
Да
->scalarNode('default_tax')
->defaultValue(18)
->validate()
->ifNotInArray([18, '18/118', 10, '10/110', 0, 'Без НДС', 20, '20/120'])
->thenInvalid('Invalid 1C vat type %s')
->end()
->end()
А разве не надо тестировать этот момент? Типа если кто-то сменит или поломает при "рафакторинге"?

Sergey
16.02.2017
12:50:39
все что тебе не принадлежит - тестировать в юнит тестах уж точно не нужно
покопайся по популярным бандлам, посмотри на их тесты

Google

Sergey
16.02.2017
12:50:53
там много полезного есть

Daniel
16.02.2017
12:52:49

Sergey
16.02.2017
12:54:37
ну ты по сути тестируешь компонент симфони только на своих данных

Daniel
16.02.2017
12:54:41
Типа я как будто проверяю работоспособность ifNotInArray?
Ну ды

Sergey
16.02.2017
12:55:28
https://github.com/symfony/config/tree/master/Tests/Definition вот тут уже все проверили

Daniel
16.02.2017
12:55:55
Спасибо
Я поняль

Sergey
16.02.2017
13:10:17
хм, откуда вы все?

Daniel
16.02.2017
13:12:15
Где-то рекламу дали

Sergey
16.02.2017
13:12:23
да уже написали что из ларавеля

Юрий
16.02.2017
13:12:26
В оффчате

Daniel
16.02.2017
13:12:38
Либо Симфонисты пачками размножаются

Юрий
16.02.2017
13:12:45