
Evgen
16.12.2017
08:49:01
но на каждуый кейс надо писать новый степ, что собственно не проблема, но гибче использовать один метод для аутентификации любого юзера
When I change something in my profile - тоже самое, можно писать но объем контекста становится гораздо больше
если говорить с точки зрения БДД, то оно более верно, но все это "можно написать" - время
А в ответ про пхпюнит, конечно можно и на пхпюните, но в том то и дело, что Бихат дает прозрачность, и в миксе с проверками ответов АПИ можно описывать проверки более сложной логики в гораздо более наглядном виде, абстрагируя код теста от описания логического флоу. Т.к кейс с АПИ профиля был дан не для того, что б показать как надо тестировать АПИ, а как достать ентити менеджер.

Google

Sergey
16.12.2017
09:10:07
и в целом "I am <user>" это вполне себе реюзабельный стэп
тебе не важны email и пароль в сценарии, у тебя будет всеравно табличка что "юзер с такой-то ролью это вот такой-то юзер"

Evgen
16.12.2017
09:11:15
Сергей, я перкрасно понимаю что не каждый и когда надо тоже использую конструкции вида, Given I am logged as admin и тп
в данном конкретном случае важно
псмотри просто внимательно сценарий
1 степ:
Given follow email users:
| email | plainPassword| firstname | lastname |
| user@test.com | 1234567 | FirstName | LastName |
т.е есть упоминание какой емейл и какой пароль
второй же степ
Given I am successfully logged in with email: "user@test.com" and password: "1234567"

Sergey
16.12.2017
09:12:46
я понимаю о чем ты, но как по мне этот сценарий слишком сильно детализирован.

Evgen
16.12.2017
09:12:49
т.е этот же емейл и пароль

Google

Sergey
16.12.2017
09:13:03
Given Bob registered
and I logged in as Bob
вжух

Evgen
16.12.2017
09:13:13
т.е в наглядности зависимостей он более прозрачен чем

Sergey
16.12.2017
09:13:24
если у тебя добавится скажем день рождения в профиль - не надо будет переделывать сценарии
если для себя - спроса нет
делай как тебе удобно)

Evgen
16.12.2017
09:13:54
цели - изолировать данные

Sergey
16.12.2017
09:14:05

Evgen
16.12.2017
09:14:10
у меня есть кейс где взаимодействуют два любых юзера

Sergey
16.12.2017
09:14:12
кто читает эти сценарии?

Evgen
16.12.2017
09:14:52
Given follow email users:
| email | plainPassword| firstname | lastname |
| user@test.com | 1234567 | FirstName | LastName |
| user2@test.com | 1234567 | FirstName2 | LastName2 |
как минимум ты читаешь, через пол года, год
и не надо лезть смотреть кто там такой Боб, а кто не Боб )

Sergey
16.12.2017
09:16:22
что ты будешь делать если у тебя будет увеличиваться набор обязательных данных?

Evgen
16.12.2017
09:16:23
опять же универсальныйх случаев не бывает
так это и есть что нет универсального

Sergey
16.12.2017
09:16:54
универсальных - не бывает, вопрос опять же все в уменьшении связанности и как следствие ограничение касакда изменений

Evgen
16.12.2017
09:16:57
Слишком много данных - фикстуры

Sergey
16.12.2017
09:17:29
ну и еще - если эти сценарии читают только программисты - я не вижу смысла в behat, это сложнее чем phpunit к примеру

Google

Evgen
16.12.2017
09:17:46
Но там где можно смоделировать данные, имхо прозрачности это дает больше

Sergey
16.12.2017
09:17:55
еще есть нюансы - разделение фича контекстов, если у тебя он один на все сценарии - тогда твое желание понятно

Evgen
16.12.2017
09:18:09
конечно не один ))
я б сказал десятки в крупных проектах

Sergey
16.12.2017
09:18:44
я не вижу тут прозрачности - вот честно.... но это опять же мое ИМХО и я допускаю что тебе и твоей команде так удобно)

Evgen
16.12.2017
09:20:27
а по поводу контекстов, кто то писал про то что он привращается в ад, тут как раз и надо делить на отдельные контексты + в дополнение если это не АПИ, то и Page паттерн что б абстрогировать контекст от разметок страницы

Sergey
16.12.2017
09:21:10
тесты это тот же код, и там нужно следовать тем же правилам о разделении ответственности и т.д.
так что это логично)

Evgen
16.12.2017
09:21:35
да согласен, что каждому свой подход удобен и спорить какой лучше смысла нет

Sergey
16.12.2017
09:21:49
для меня основная ценность behat в том, что бы иметь возможность с точки зрения пользователя понять как что работает
и я не вижу смысла его юзать если у тебя хотя бы QA не прикладывают руку к описанию сценариев и их не читают продукт оунеры например
а продукт оунерам не очень интересно читать таблички "данных" или куда ты там json отправляешь

Evgen
16.12.2017
09:22:49
да, согласен и даже если его читают программисты, то листание листингов пхпюнита гораздо запутание, чем чтение бихат фич, вместо доки

Sergey
16.12.2017
09:23:05
да и если у тебя и так есть нормальная дока по API - к чему такие муки испытывать?)

Evgen
16.12.2017
09:23:35
да оставь АПИ
пример АПИ это опять же только показать пример менеджера )
на АПИ то бихат не останавливается

Sergey
16.12.2017
09:25:41
я про сценарии вида I send json to....
я свои сценарии от UI отвязываю

Google

Sergey
16.12.2017
09:26:07
что бы один и тот же сценарий можно было на любом уровне потестить

Evgen
16.12.2017
09:27:55
более того один и тот же сценарий может тестится девами к примеру на уровни АПИ, а QA на уровне работы с ЮИ

Sergey
16.12.2017
09:28:14
ну то есть довольно хороший критерий качества сценария, если тебе не столь важно что и как оно тестит, но ты можешь просто взять и по этому сценарию руками пройтись и в нем будет смысл

Bogdan
16.12.2017
12:36:18
http://symfony.com/doc/current/testing.html - вот это в сф 4 вообще актуально?
к примеру, смотрю код класса Сlient, а там вообще нет метода request
хотя смотрю демо, там все как в примере. Что-то у меня не так, видимо

Admin
ERROR: S client not available

Bogdan
16.12.2017
13:00:28
компонент BrowserKit не был установлен, вот что было не так.

Arky
16.12.2017
14:50:43
Пофиксил SoC, сделал коммит)

Bogdan
16.12.2017
15:02:23
когда инжектим em в метод public function action(EntityManagerInterface $em) {} - как его можно подменить в тестах?

Sergey
16.12.2017
15:03:40

Bogdan
16.12.2017
15:04:05
просто метод вызываю по урлу
а, вижу $parameters у $client->request()

Sergey
16.12.2017
15:04:42
ммм не
эту штуку разруливает argument resolver-ы
а потому тебе не надо в тестах явно указать - тебе надо в конфигурации DI для интерфейса свою имплементацию подсунуть
но вообще - в тестах API (или что ты там тестишь) подменять инстанс em тебе не нужно

Bogdan
16.12.2017
15:13:31
смотрю сф4 демо, там сделано без подмены вообще - $blogPost = $client->getContainer()->get('doctrine')->getRepository(Post::class)->find(1);

Google

Bogdan
16.12.2017
15:14:22
у меня такой подход не сработал, не находит репозиторий - The class 'App\Repository\ContractRepository' was not found in the chain configured namespaces App\Entity
сработал, я вместо сущности пихал репозиторий.

Sergey
16.12.2017
15:24:59
черный ящик

Big_Shark
16.12.2017
20:26:35
https://github.com/symfony/recipes/tree/master/php-http в чем разница кто вкуривает?

Andrey
16.12.2017
21:13:29
это что такое?

Алексей
16.12.2017
21:59:07

Gaiaz Iusipov
16.12.2017
22:02:15
ребята, в context сериализатора как-то можно передать какой name_converter использовать?
или настраивается только глобально через framework->serializer->name_converter
не нашел в доках что туда кроме groups и object_to_populate можно еще настроить

Shmaltorhbooks
16.12.2017
22:20:32
Как я понял - туда можно вообще что угодно передавать и оно просто будет передано в нормалайзеры
А через OptionsResolver можно задать, чтоб для конкретного какая-то фигня была обязательной

Big_Shark
17.12.2017
01:20:53

Gaiaz Iusipov
17.12.2017
11:22:09

Bogdan
17.12.2017
13:55:48
что-то у меня при запуске phpunit начало выводить закомментированный код из вендора, соответственно тесты не запускаются, никто не сталкивался?
кэши чистил, phpunit переустанавливал. На рабочем проекте проверил - те же зависимости и все ок

Big_Shark
17.12.2017
16:10:40
@fes0r @Enleur Знаете в чем разница между этими рецепотами https://github.com/symfony/recipes/tree/master/php-http ?

Sergey
17.12.2017
16:11:22
https://medium.com/@pakaldebonchamp/rest-is-the-new-soap-97ff6c09896d

Sergey
17.12.2017
16:11:25
один - конкретный, второй - объединение 3-х