
Sergey
28.12.2016
00:14:59
функциональность не меняется, меняется способ. Но тебе почему-то придется полностью переделывать тест

da horsie
28.12.2016
00:15:09

Sergey
28.12.2016
00:15:29
возможно завтра ты захочешь получать список тегов другой командой

da horsie
28.12.2016
00:15:34
Один раз я взял от него реальный ответ и играюсь с ним

Google

Sergey
28.12.2016
00:15:44
попробуй написать такой код)

da horsie
28.12.2016
00:15:48
Выполню реальную команду, скопирую ответ
И вставлю в тест

Sergey
28.12.2016
00:16:17
окей. Ты юзал доктрину?
ну или там.... любой query builder
ты бы стал его мокать?
насколько ты думаешь это адекватно?

da horsie
28.12.2016
00:17:04
Это очень геморно
Но я хз как это правильно сделать

Sergey
28.12.2016
00:17:18
помимо того что это геморно, вы этом нет никакого смысла
просто потому что все что ты делаешь - дублируешь реализацию

da horsie
28.12.2016
00:17:25
А как надо?

Google

Sergey
28.12.2016
00:17:35
интеграционные тесты)
ты берешь и изолируешь всю работу с query builder-ом в маленькую изолированную хрень
и ее тестируешь интеграционными тестами может даже с реальной базой данных

da horsie
28.12.2016
00:18:15
Ну как-то так и приходится

Sergey
28.12.2016
00:18:17
сам по себе query builder полностью на 100% покрыт юнит тестами
точно так же как в твоем примере Shell на 100% работает
и git на 100% работает

da horsie
28.12.2016
00:18:44
Поэтому я не пользую доктрину на простых проектах, а пишу собственные мапперы на пдо

Sergey
28.12.2016
00:18:51
и вместо того что бы их "подделывать" проще взять и проверить в реальности

da horsie
28.12.2016
00:19:03

Sergey
28.12.2016
00:19:03

da horsie
28.12.2016
00:19:21

Sergey
28.12.2016
00:19:29
ну так причем тут доктрина?)
у меня все что знает о доктрине лежит в репозиториях (и в read моделях)
и покрывается это только интеграционными тестами. И логики там нет.
тупо выборки

da horsie
28.12.2016
00:20:01
Да
Именно так

Sergey
28.12.2016
00:20:17
и вот важный вопрос - что бы логики небыло
ты можешь например... просто прогонять какой-нибудь сборщик метрик и просто для некоторых классов контролировать цикломатическую сложность

Google

Sergey
28.12.2016
00:21:11
например "у всех репозиториев количество if-ов на метод не должно привышать"
(конечно не надо жестко ограничивать себя)
тут суть только в уменьшении количества тест кейсов
любое ветвление логики - увеличение тест кейсов
прячем все if-ы внутри маленьких классов, которые будем покрывать юнит тестами

da horsie
28.12.2016
00:22:01
Но с доктриной и с файлами у меня просто выбора нет. А тут есть выбор - можно сделать отдельные методы.

Sergey
28.12.2016
00:22:13
ну мол не понял

da horsie
28.12.2016
00:22:26
О gitgateway

Sergey
28.12.2016
00:22:40
отдельные методы.... которые будут делать.... что?
ты можешь сделать например отдельный объект GitResultParser

da horsie
28.12.2016
00:22:57
Возвращать отдельное свойство отдельной ревизии

Sergey
28.12.2016
00:22:58
или что-нибудь эдакое
зачем?
то есть ты добавишь публичный метод тупо ради тестов?

da horsie
28.12.2016
00:23:37
Чтобы иметь более гранулярное покрытие тестами

Sergey
28.12.2016
00:23:58
лучше написать интеграционный тест чем добавлять публичный метод, который нигде не должен юзаться

da horsie
28.12.2016
00:24:14
Test induced damage, да

Sergey
28.12.2016
00:24:46
в этом как раз суть TDD - писать ровно столько сколько надо для решения задачи

Google

Sergey
28.12.2016
00:25:03
ты при помощи TDD придешь к тому что тебе нужен интерфейс GitIGateway
и все
дальше дробить или нет
это уже зависит от задачи

da horsie
28.12.2016
00:25:21
В целом мне кажется я понял свою ошибку, у меня в голове юнит=класс

Sergey
28.12.2016
00:25:27
в твоем случае это лишние слои абстракции которые попросту не будут приносить профита
http://martinfowler.com/bliki/UnitTest.html
вот тут очень хорошо расписано про это
в особенности про N определений юнит тестов

da horsie
28.12.2016
00:27:30
Да, в твоем подходе есть преимущество - он тестирует интерфейс целиком как смысловую единицу
Вместе с поведением

Sergey
28.12.2016
00:28:14
в этом видосе про integration tests are scam как раз говорится что тестировать нужно соблюдение объектом контракта. Не отдельные методы, а совокупность

da horsie
28.12.2016
00:28:26
Дада, я смотрел
Хороший видос

Sergey
28.12.2016
00:28:58
в целом все это больше поиск компромисом между скоростью выполнения и т.д
то же 100% покрытие кода тестами не нужно
потому что вопервых метрика крайне не эффективная (без мутационных тестов)
ну а во вторых многие вещи просто тупо нет смысла покрывать тестами. Они никогда не будут меняться
90% норм

Google

da horsie
28.12.2016
00:31:55
Клево
Большое спасибо
Очень познавательная беседа

Aleh
28.12.2016
10:07:29
https://gist.github.com/mkusher/d8b9a30c53da83f01341bfc6fa218900
Два хендлера. Делают одно и тоже, написаны немного по-разному

Sergey
28.12.2016
10:14:02
годнота
а коллекции в ts как выглядят?

Aleh
28.12.2016
10:14:48
Если просто массивы, то два варианта:
T[]
Array <T>

Sergey
28.12.2016
10:15:51
второй канеш

Aleh
28.12.2016
10:16:27
2 строки победили?) Мне тоже второй нравится)

Sergey
28.12.2016
10:17:48
ну я не вижу смысла в классе там где можно лямбдой разрулить
так посмотришь, вроде не сильно тошнотворно жс выглядит

Aleh
28.12.2016
10:19:09
С типами только если
Иначе будешь объект с массивом складывать

Sergey
28.12.2016
10:19:32
потом открываешь что-то типа https://gist.github.com/Enleur/e2a349b805d04a5b3fc39af62e3c46a0 ужасаешься и закрываешь

Aleh
28.12.2016
10:21:35
I'm back in ussr

Sergey
28.12.2016
10:22:18
прошло уже больше 5 лет, а стиль кода на жс у меня не менялся)
я правда уже не писал на нем года 2.5 точно
но наши фронты продолжают в том же духе все делать

Aleh
28.12.2016
10:24:49
Поставь им eslint с airbnb конфигом