# Понедельник 37 твитов
Привет, эту неделю проведу с вами я, @boriscoder. Я работаю в отделе тестирования Яндекса и мы будем говорить о тестировании.
12:20Для начала расскажите о том, какими тестовыми фреймворками и библиотеками пользуетесь. Mocha, Jasmine, что-нибудь еще?
12:21@jsunderhood H&E. Он же Hands&Eyes.
Я обычно называю его manual testing
@jsunderhood H&E. Он же Hands&Eyes.
12:29
@jsunderhood помимо указанного чай, стамбул и gemini12:29
@jsunderhood Tape github.com/substack/tape кто-нибудь использует?
Мне тоже интересно. Для чего нужны подобные yet another test frameworks?
@jsunderhood Tape github.com/substack/tape кто-нибудь использует?
12:55
@jsunderhood есть вот такое мнение: medium.com/javascript-sce…
Я бы поспорил с автором этой статьи, но мнение интересное
@jsunderhood есть вот такое мнение: medium.com/javascript-sce…
12:58
Я занимаюсь в компании разработкой инструментов для тестирования. Наша команда поддерживает инфраструктуру для запуска автотестов
13:01.@jsunderhood можно спрашивать меня о разных тонкостях тестирования. Как правильно писать тестовый код? Как ускорить медленные тесты?
13:03@jsunderhood как грамотно проектировать тесты?
Это слишком общий вопрос, надо детализировать. Как решить где что тестируем?
@jsunderhood как грамотно проектировать тесты?
13:11
@jsunderhood Как писать unit-tests для визуальщины?
Для начала нужно писать UI-код с модулями, например на ES6. Потом подключаем библиотеку, например, rewire и готово
@jsunderhood Как писать unit-tests для визуальщины?
13:13
@jsunderhood как решить, где проходит грань между “стОит тестировать” и “не стОит тестировать”.
Как сделать тесты loosely coupled к коду?
Обычно начинают тестирование с тех модулей, которые используются в нескольких местах. В них опаснее делать ошибки
@jsunderhood как решить, где проходит грань между “стОит тестировать” и “не стОит тестировать”.
13:15
Как сделать тесты loosely coupled к коду?
@jsunderhood @mr_mig_by что вы последнее такое тестировали? Над чем сейчас работаете?
Недавно мы публиковали статью на Хабр: habrahabr.ru/company/yandex…
я писал набор тестов для проверки на javascript
@jsunderhood @mr_mig_by что вы последнее такое тестировали? Над чем сейчас работаете?
13:23
@jsunderhood почему все говорят что unit тесты предпочтительныей e2e тестов для front-end'a? Посоветуй стек технологий для того и того)
Потому что e2e тесты дольше исполняются и падают по случайным причинам. Unit-тесты быстрее и надежнее
@jsunderhood почему все говорят что unit тесты предпочтительныей e2e тестов для front-end'a? Посоветуй стек технологий для того и того)
13:41
@jsunderhood все вместе. Блоки переезжают с места на место, меняется поведение, структура и тп. Вобщем e2e довольно дорого обходится.
Завтра поговорим о том, что делать frontend-разработчику с selenium и как сделать e2e дешевле
@jsunderhood все вместе. Блоки переезжают с места на место, меняется поведение, структура и тп. Вобщем e2e довольно дорого обходится.
14:04
@jsunderhood о, а расскажи про e2e тестирование? протрактор пробовали? а nightwatch?
Все понемногу пробовал в исследовательских целях. У таких full-stack тестовых фреймворков беда с расширяемостью
@jsunderhood о, а расскажи про e2e тестирование? протрактор пробовали? а nightwatch?
14:33
.@jsunderhood проще взять Jasmine и написать хелперов под свой проект. Легче будет интегрироваться с Teamcity в один отчет с unit-тестами
14:36@jsunderhood но фронтенд по большей части это визуализация и в основном это работа с домом, это юнит тестами не покрыть, разве нет?14:38
.@hellbeast92 можно создать себе тестовый dom-фрагмент, и тестировать в нем. CSS так не проверить, а логику и html можно.
14:39@jsunderhood Можешь порекомендовать доклады/статьи? Не обязательно про инструменты, можно про саму идею автоматизации визуального сравнения.
Есть отличный курс лекций от моих коллег: youtube.com/playlist?list=… Это про тестирование и devops в целом
@jsunderhood Можешь порекомендовать доклады/статьи? Не обязательно про инструменты, можно про саму идею автоматизации визуального сравнения.
14:46
@jsunderhood Ты знаешь инструменты автоматического визуального тестирования? Как Gemini только альтернативы?
Ключевое слово "CSS regression testing". Я слышал еще о PhantomCSS и WebdriverCSS, но в основном у нас Gemini
@jsunderhood Ты знаешь инструменты автоматического визуального тестирования? Как Gemini только альтернативы?
14:49
@jsunderhood @toivonens сам не пробовал //cc @mourner15:26Made a new awesome library for pixel-level image comparison (e.g. for regression tests on screenshots) github.com/mapbox/pixelma…
.@yuritkachenko @toivonens @mourner там слишком строгий diff, будет много шума. Это как верстку с макетом попиксельно сравнивать.
15:27.@toivonens @yuritkachenko @mourner конечно. Тени, границы могут немного отличаться. В Gemini этот кактус долго кушали. //cc @SevInf
15:46Ну и давайте под вечер померяемся coverage. Сколько должно быть для уверенности в своих тестах? 20? 50?
16:16@jsunderhood для уверенности 100
Это не поможет на самом деле. Кроме покрытия строчек кода есть еще покрытие всех возможных входных параметров.
@jsunderhood для уверенности 100
16:48
.@jsunderhood кто-нибудь знает хорошие инструменты, которые скажут "ты проверил только положительные числа, иди проверяй отрицательные"?
16:49@jsunderhood Другой разработчик, делающий ревью разве что :-/17:10
Есть такое понятие QuickCheck, о котором упомянул @mr_mig_by. Вы можете описать правила, по которым сгенерируются тестовые данные
17:13.@jsunderhood но в javascript пока до этого далеко
17:13А вы пишете параметризованные тесты? Как вы это делаете: parameters.forEach()? А пробовали хранить параметры не в коде, а загружать снаружи?
17:15ProTip: у beforeEach, afterEach и it блоков общий this. Можно не объявлять много разных var, а писать this.component = new TestComponent()
18:44И еще есть вот такая интересная библиотека github.com/rluba/hamjest Смотрите какую сложную проверку можно написать: pic.twitter.com/7b0GmElG9E
.@jsunderhood и в результате вы получите компактное, но понятное сообщение об ошибке. pic.twitter.com/VWCIQpsUVE
@jsunderhood все это вдохновлено java-библиотекой Hamcrest: github.com/hamcrest/JavaH…
20:11@jsunderhood супер инструмент это таск из которого делается BDD и код. Все надуманные случаи ты добавляешь за свой счет. Без фанатизма ;-)
Звучит как описание Cucumber: github.com/cucumber/cucum…
@jsunderhood супер инструмент это таск из которого делается BDD и код. Все надуманные случаи ты добавляешь за свой счет. Без фанатизма ;-)
20:58
@jsunderhood а что плохого в кукумбер?21:03
.@svdmitrij Он хороший, я им пользовался: github.com/just-boris/che… Но чаще приходится тестировать новые вещи, а не 10 раз тестить то же самое
21:03# Вторник 38 твитов
@jsunderhood видели/пробовали мой wallabyjs.com? Что думаете о самой идее выполнения только тестов затронутых изменениями кода?7:41
.@ArtemGovorov пробовал. У меня 500 unit-тестов выполняются не больше 3 секунд, так что нет смысла. Кажется лучше оптимизировать именно это.
7:42Доброе утро! Сегодня поговорим о Selenium. Для начала вам слово: должен ли frontend-разработчик писать e2e тесты?
7:44.@jsunderhood я пишу. Я знаю как устроен мой код и смогу оптимальнее его протестировать, чем кто-то другой
7:45@jsunderhood какие основополагающие вещи по написанию тестов стоить прочесть?
xUnit patterns: xunitpatterns.com Настольная книга в нашем отделе
@jsunderhood какие основополагающие вещи по написанию тестов стоить прочесть?
7:53
@jsunderhood как тестировать работу с файловой системой? Чтобы при этом физически ничего не писать. Например mock-fs — есть ли что-то лучше?
Еще есть memory-fs. github.com/webpack/memory… Надо выбирать ту, которая больше подходит по API.
@jsunderhood как тестировать работу с файловой системой? Чтобы при этом физически ничего не писать. Например mock-fs — есть ли что-то лучше?
7:55
Самое страшное в Selenium – это начать. У Protractor (тестовый фреймворк для Angular.js) есть хороший гайд: angular.github.io/protractor/#/s…
8:43.@jsunderhood еще можно почитать статью @mista_k noteskeeper.ru/1209/
8:44.@jsunderhood в любом случае все сводится к тому, что у вас есть веб сервер, локальный или удаленный. Запросами к нему управляется браузер
8:45@jsunderhood Но Selenium очень уныл, не проще ли покрыть все unit тестами, а для e2e оставить только основной функционал?
Конечно же, сначала покрываем как можно больше unit, за затем проверяем что все модули собрались вместе в e2e
@jsunderhood Но Selenium очень уныл, не проще ли покрыть все unit тестами, а для e2e оставить только основной функционал?
8:53
.@jsunderhood хватит десятка Selenium тестов, которые пройдут прокликают страницы и убедятся, что у вас вообще js подключился и завелся
8:54Как и полагается в Javascript, существует несколько почти одинаковых библиотек для работы в webdriver. Выбирайте любую, кроме стандартной.
9:02@jsunderhood стандартная – это вот: code.google.com/p/selenium/wik… не обновляется и с неудобным API
9:04.@jsunderhood альтернативы webdriver.io github.com/admc/wd. Я пользусь github.com/groupon/webdri…, у него синхронное API
9:06@jsunderhood Я вообще не верю в отдельных QA как профессию. Тестирование это часть работы разработчика.9:07
@DevArtem @jsunderhood смысл в селениум, если есть отличный капибара-вебкит который умеет жаваскрипт? Через виртуальный вебкит браузер
А можно поподробнее? Capybara классная, но я видел только на ruby
@DevArtem @jsunderhood смысл в селениум, если есть отличный капибара-вебкит который умеет жаваскрипт? Через виртуальный вебкит браузер
9:15
.@achempion это проблема. Ruby похож на Coffeescript, а его здесь не любят. Вот бы кто-нибудь сделал порт на js, как с Cucumber
9:21Когда selenium включен, можно писать тесты. Вытащил из кода небольшой пример: gist.github.com/just-boris/6dd…
9:46.@jsunderhood В этом примере куча проблем, дальше я покажу как их исправить. Во первых, нужно убрать от повторение строки '.search__input'
9:48.@jsunderhood можно по-разному избавиться от таких магических констант. Чтобы каждый раз не писать css-селекторы их оборачивают в PageObject
11:33@jsunderhood Вы создаете объект, свойства которого ведут на важные элементы вашей страницы: gist.github.com/just-boris/c4c…
11:44@jsunderhood а потом в тестах используете эти константы. И все селекторы окажутся собраны в одном месте и их легко править
11:46@jsunderhood почитать об этом больше можно на сайте самого selenium: code.google.com/p/selenium/wik… или погуглить "PageObject pattern"
11:47Грубо говоря, PageObject – это просто JSON c маппингом имен на css-селекторы. Поэтому специальный framework не нужен twitter.com/DevArtem/statu…
12:59@jsunderhood вопрос пропал :( Меня спросили примеры PageObject для асинхронного JS
13:00Я выскажу непопулярное мнение, но асинхронные тесты это плохо. webdriver-http-sync лучше webdriver.io.
13:05.@jsunderhood Синхронный код легче читать, в нем легче отловить ошибки. В тестах (именно здесь) асинхронность не дает ничего, одни минусы
13:06@jsunderhood бывает, что общие функции для PageObject помещают в этот клас: заполнение формы типичными данными, сложные взаимодействия
Я тоже так сначала делал, потом перестал. Общие функции собираются в другую штуку под названием Actions
@jsunderhood бывает, что общие функции для PageObject помещают в этот клас: заполнение формы типичными данными, сложные взаимодействия
13:28
.@jsunderhood в нашей команде разработали библиотеку на эту тему: github.com/yandex-qatools… но она на java. Мы только начинаем вступать в js
13:30Отдельный большой вопрос как отлаживать тесты. Unit тесты легко, как обычно в devtools, а что делать с e2e? Поделитесь решениями
15:55.@jsunderhood проблема в том, что в e2e тестах код трогать нельзя, можно только смотреть результат. А какой результат работы браузера?
16:14.@jsunderhood Это скриншот. Поэтому selenium тестах их снимается очень много. Только мало тестовых фреймворков дают удобный механизм
16:17@jsunderhood Автор Protactor, например, считает, что это не его задача: angular.github.io/protractor/#/d…
16:18@jsunderhood завтра я расскажу, как легко снимать пачками скриншоты с браузера, и потом не запутаться, что они означают.
16:21Сделали анонс следующей встречи. Будет много интересного! vk.com/spb_frontend?w…
В четверг будет встреча с двумя ex-@jsunderhood. Надо бы пойти присоединиться
Сделали анонс следующей встречи. Будет много интересного! vk.com/spb_frontend?w…
16:54
Сделали анонс следующей встречи. Будет много интересного! vk.com/spb_frontend?w…
В прошлом твите я что-то напутал. Встреча 25 числа, в воскресенье. Будут разговоры о React
Сделали анонс следующей встречи. Будет много интересного! vk.com/spb_frontend?w…
18:52
Дежурный вечерний ProTip: github.com/minimaxir/big-… Список строк, которые должен принимать ваш код. Длинные, короткие, спецсимволы - все есть
19:23@jsunderhood а есть подобная вещь для тестирования алгоритмов сортировки? (Разной длинны массивы, почти отсортированные массивы и все такое)
Очень специфическая задача. Я не сталкивался
@jsunderhood а есть подобная вещь для тестирования алгоритмов сортировки? (Разной длинны массивы, почти отсортированные массивы и все такое)
19:36
# Среда 22 твита
Доброе утро! Сегодня я расскажу об одном необычном тест-репортере. Обычно результат тестов выглядит так pic.twitter.com/Y7mHL5oQ1f
.@jsunderhood а может выглядеть вот так. Это Allure-framework. Система репортов, котороу я разрабатываю для компании pic.twitter.com/PyuFAmIfup
@jsunderhood А зачем? По мне red/green как в гитхабе в пул реквестах вполне достаточно.7:29
@jsunderhood Не очень вижу как такой интерфейс с этим поможет. Все равно в итоге стактрейсы читать.7:33
.@freiksenet_ru во-первых,мы группируем похожие Exception в список Defects. Видимых ошибок получается меньше. Во-вторых, у нас есть Attaches
7:35Помимо нового представления результатов, наш фреймворк позволяет записать больше данных. Вы можете прикрепить любой файл к тесту из кода
7:37@jsunderhood вы вызываете где-то в коде allure.createAttachment("screenshot", data); и он прикрепляется к тек. тесту pic.twitter.com/bYNt8AYNwb
.@jsunderhood полный пример с mocha можно найти здесь: github.com/allure-example…
7:41Вот так в Mocha можно сохранять скриншот для failed теста. Allure позаботится и подклеит его к нужному сьюту и кейсу pic.twitter.com/1aVQ5NwXEs
В Allure есть еще одна инженерная хитрость. После тестов вы получаете файлы с raw-xml. Чтобы получить отчет, надо его построить c allure-cli
11:51.@jsunderhood это нужно, чтобы не тратить ресурсы на отчеты, которые никому не интересны (когда в них нет ошибок)
11:52@jsunderhood Allure-cli доступен в через homebrew, ppa, архив для windows, плагины в teamcity, jenkins, bamboo: github.com/allure-framewo…
11:53Иногда хочется детализировать свои тесты и разделить их на шаги. Заходим -> Логинимся -> Открываем страницу -> Жмем на кнопку
14:22.@jsunderhood в Allure для этого есть понятие Steps. Определяем step-функцию через наше API pic.twitter.com/0CHPzrjr1k
@jsunderhood и получаем в репорте лог по шагам в терминах тестируемого приложения, как от ручного тестировщика pic.twitter.com/x23P1QKQqI
О чем рассказать завтра? Сейчас самое время предложить тему. Можем обсудить стек karma+phantomjs и альтернативы. Кто-нибудь его использует?
16:05Кстати, сам Allure – это SPA-приложение на Angular + Bootstrap + Angular-UI. К коду написан пак тестов на Jasmine
16:17ProTip: можно писать ассерты в beforeEach. Если там будет exception, то mocha не исполнит остальные тесты из этого describe. Экономит время
18:34Также в правильном коде тестов есть разница в ошибках: Exception – это ошибка в коде тестов, а AssertionError – в коде приложения.
19:44"undefined is not a function" это Exception. В хороших тестах так быть не должно. Для AssertionError есть npm-пакет: npmjs.com/assertion-error
19:47@jsunderhood напрямую им пользоваться не стоит, его использует, например, chai. Можно писать и свои библиотеки
19:47@jsunderhood Allure отличает эти два вида ошибок и по-разному их обрабатывает. Это позволяет сэкономить время на поиск проблемы.
19:48# Четверг 40 твитов
@jsunderhood Мы используем. Это property-based testing называется.8:28
Привет. А сегодня давайте поговорим о karma. Изначально tool назывался Testacular. Потом они переименовались из-за неприличных ассоциаций
8:30.@jsunderhood это инструмент для запуска кода в браузере. Вы даете ему файлы с кодом, подключаете launcher-plugin, и смотрите результат
8:31Типичное использование: phantomjs+karma в режиме watch следит за файлами и запускает тесты на их изменение. Потом тесты в travis на Firefox
8:43.@jsunderhood у karma очень гибкая архитектура и много. Это адаптеры под фреймворки, препроцессоры кода и репортеры
8:45.@jsunderhood в команде разработчиков есть наш @maksimrv, который активно продвигал ее в русскоязычном сообществе
8:46Со связкой karma+phantomjs много проблем. Phantom периодически умирает, нельзя зайти в devtools, отладка только через console.log
9:29@jsunderhood 1.X - древний Webkit. DevTools имеются :-) У нас большие надежды на 2 (и уже 3) версию.9:31
.@Vitalliumm про 2 версию эпичный баг: github.com/ariya/phantomj… JS-разработчики не в состоянии собрать себе Phantom из исходников
9:33.@Vitalliumm а какие планы на будущее? Все вокруг уже хотят ES6, который уже есть в Chrome, Firefoх и Node
9:37@jsunderhood да, но мы нашли в чем проблема. И уже есть фикс.9:37
@jsunderhood пилим версию с Chromium под капотом (и full интеграцией с Node.js). FF даже не рассматривали, так как нет опыта.9:39
@jsunderhood плюс для FF есть @slimerjs
Я пробовал работать со Slimmer. Он использует Firefox из системы и настроить регулярные тесты так и не получилось
@jsunderhood плюс для FF есть @slimerjs
9:41
.@Vitalliumm то есть архитектура похожая на Electron. А в чем отличия?
9:44@jsunderhood да, плюс у него нет полной поддержки headless режима.
Именно это и была основная проблема. В режиме watch фокус постоянно бросался в окно с тестом.
@jsunderhood да, плюс у него нет полной поддержки headless режима.
9:45
@jsunderhood да, похожая. Самым главным отличием будет headless режим и много новых API, которые мы не смогли реализовать с текущей arch.9:46
@jsunderhood но мы открыты для всех предложений :)
Приходите в PhantomJS, несмотря на неучастие @AriyaHidayat, проект в хороших руках
@jsunderhood но мы открыты для всех предложений :)
9:47
В качестве альтернативы можно посмотреть на github.com/segmentio/nigh… это обертка вокруг Electron
9:48@jsunderhood вот кстати да. Из-за его неучастия (он участвует, но не особо), мы не делаем кардинальных изменений, а очень хочется.9:54
Electron оказался намного популярнее node-webkit. На нем можно делать не только desktop-приложения, но и небольшие инструменты
10:26Например, github.com/Jam3/hihat – это devtools без браузера. Удобно для запуска мелких тестов
10:27Кроме поиска headless браузеров, есть и другое решение – а что, если попытаться сэмулировать браузер в node.js?
11:44.@jsunderhood на эту тему куча решений github.com/tmpvar/jsdom github.com/krasimir/atomus github.com/cheeriojs/chee… у всех свои отличия
11:46@jsunderhood Zombie.js?11:46
Я пользуюсь JSDOM. Настройку подсмотрел здесь: github.com/thejameskyle/m…
11:48.@jsunderhood с Webpack и Browserify стало популярно писать браузерный код в node.js стиле. Удобно, что его стало можно тестировать в node
12:38У меня был проект с небольшим паком из 50 тестов. В Karma они прогонялись за ~5 cек, с учетом запуска. В node+jsdom все проходит за 200ms
12:41.@jsunderhood экономия на препроцессинге и trade-off на общение с браузером дает значительный выигрыш в скорости
12:42@jsunderhood это все справедливо для только функциональных тестов. Для проверки стилей лучше скриншоты и Selenium.
12:43Сheerio тоже хорошее решение, но это эмуляция jQuery для node, а не полного DOM API. Для React и Backbone этого недостаточно
13:32.@jsunderhood возможно сейчас на волне развития изоморфного (универсального) javascript появятся еще решения. Может вы их уже знаете?
13:33Еще когда мигрировал с karma на jsdom наступил на интересные грабли. Модули в node.js кэшируются, поэтому запуск на watch получал старый код
14:26.@jsunderhood можно делать всякие хаки с require.cache, а можно просто каждый раз запускать тесты в новом процессе pic.twitter.com/aafCV4eeUG
.@jsunderhood таким образом мы получаем на каждый старт чистое окружение. Karma делает аналогично она запускает новые тесты в iframe
14:29@jsunderhood есть опыт использования nightmare 2.x? Месяц назад не смог завести, использую 1.8.x, она на phantomjs. Работает стабильно16:09
ProTip: в lodash можно подменить Date, чтобы заставить _.debounce сработать раньше. Это ускорит тесты с его участием pic.twitter.com/RNxGYP2lyE
@jsunderhood ваще, fyi, двигаем эту тему в реальные браузеры, хромиумвцы думают, эджевцы хотят делать, фаерфоксы уже делают.
Что они делают? Возможность запуска без видимого окна?
@jsunderhood ваще, fyi, двигаем эту тему в реальные браузеры, хромиумвцы думают, эджевцы хотят делать, фаерфоксы уже делают.
17:33
TestLikeAPro: у Jasmine есть свой fake-server: jasmine.github.io/edge/ajax.html когда у вас проект на Jasmine, вам Sinon не нужен совсем
18:10@jsunderhood условно да, конечный вариант который я пушу, это пропись версии браузера в дев депах проекта18:11
# Пятница 50 твитов
Доброе утро! Давайте сегодня поговорим про взаимодействие с backend. Так получилось, моя команда состоит из 5 джавистов и frontend
7:50Allure изначально разрабатывался под java-тесты. Адаптация под остальные языки пришла позже. Поэтому core проекта собирается maven
7:51.@jsunderhood собирать frontend maven-ом не такая боль, как может показаться. Есть все необходимые плагины.
7:52@jsunderhood господи, вот я и услышал фразу "собирать фронтэнд maven'ом"8:02
@safinalexey @jsunderhood И сейчас можно)) просто запускалка тасков github.com/eirslett/front…8:13
Webjars – bower для java: webjars.org
8:17@jsunderhood есть еще bitbucket.org/cofarrell/bowe… но он так и не смог установить все что мне нужно
8:18SASS собирать легко, потому что он написан на Ruby. Подключаем jruby и все работает. Less работает через Rhino
9:43А вот с упаковкой js все плохо: есть только wro4j без поддержки SourceMaps Из-за этого скрипты в Allure остаются неупакованными
9:56@jsunderhood плагины - аналоги из npm или те же самые, но крутятся в rhino?10:20
.@agudulin особого смысла запускать что-то в Rhino нет. Сила js-инструментов не в языке, а в большом количестве модулей из NPM
10:22@jsunderhood бовер же закопали???
Пока вроде развивается. Последний коммит в bower был вчера github.com/bower/bower
@jsunderhood бовер же закопали???
10:24
@jsunderhood @alexeyraspopov ну так ты можешь использовать ванилу, или любую модульную систему или сбилдить в UMD и стянуть это через npm.10:55
В комментариях хоронят Bower. Для профессиональных js-разработчиков он действительно уже не нужен.
11:04.@jsunderhood но иногда бэкенд-разработчики хотят сверстать что-то маленькое. Они не хотят настраивать сборку, они Bower как раз для них
11:06@jsunderhood @m_arzubov @alexeyraspopov это в основном jquery-плагины. в этом кейсе действительно есть смысл делать билды
Да. Можно сказать, что Bower это каталог jQuery плагинов и других UI-штук для простых проектов
@jsunderhood @m_arzubov @alexeyraspopov это в основном jquery-плагины. в этом кейсе действительно есть смысл делать билды
11:07
@jsunderhood @iamstarkov @m_arzubov если люди способны написать11:09
bower install N
не будет сложно написать и
browserify index.js > bundle.js
.@alexeyraspopov @iamstarkov @m_arzubov написать один раз несложно. Проблемно настроить автоматическую сборку вместе с backend-кодом
11:10@alexeyraspopov @jsunderhood а как же разделение библиотек нужных для сборки например и тех, которые уйдут на фронтенд?11:10
.@SilentImp @alexeyraspopov я кладу библиотеки для frontend в dependencies, а те что для сборки – в devDependencies
11:11Вот еще тема для обсуждения: Не кажется ли вам, что сахар из ES6 может превратить язык в Perl, которого все боятся из-за нечитаемости
12:15@jsunderhood например, вот такой код из примеров Redux с первого раза сложно понять pic.twitter.com/ERFFozstoq
@jsunderhood Все что угодно может быть превращено в Perl, если вовремя не бить по рукам (себе в первую очередь).12:18
@freiksenet_ru @jsunderhood Это просто currying, как в любом функциональном языке. Если знаешь паттерн, даже не думаешь про это.13:05
@dan_abramov @jsunderhood Если разбить по строкам то читатся будет гораздо лучше ;) Проблема не в карринге, а в том как это написано.13:05
@jsunderhood сложность этого кода — проблема Redux, не ES6.13:05
@jsunderhood привыкнем) а самому писать можно и без сахара, если страшно13:08
@alexeyraspopov @jsunderhood @dan_abramov @freiksenet_ru Но да, в мире JS это единственное каррирование, которое есть, пусть и ограниченное.13:22
@RReverser @jsunderhood @dan_abramov @freiksenet_ru полно нормальных имплементаций. Свое решение пишется также легко pic.twitter.com/RHSJlJT0T413:25![]()
@jsunderhood Тем более, такое API позволяет легко делать и сохранять в замыканиях общие инициализации на любом шаге.13:30
@jsunderhood Это часто бывает нужно, и обычное каррирование такой возможности не дает.13:30
@jsunderhood @RReverser ИМХО в #redux апи не большое, но понимание сложнее вот именно из-за этого функция->функция->… Сложнее цепочку разоб13:36
@jsunderhood А что документировать? В твоем скрине инициализация не нужна, в другом будет нужна. Все дело в гибкости, чтобы покрыть оба.13:38
.@RReverser сейчас не понятно, какая из функций вызовется один раз, а какая на каждый action. Если это описать, то станет лучше @dan_abramov
13:40@serhey_shmyg @jsunderhood Воспринимай это как упрощенный вид джавоподобной цепочки классов. К этому быстро привыкнуть и удобнее.13:41
@jsunderhood @dan_abramov А по-моему, наоборот, понятнее - та что непосредственно с аргументом action, та и на каждый, те что без - 1 раз.13:44
@jsunderhood @dan_abramov Но да, описать можно, чтобы люди не терялись.13:44
@jsunderhood @RReverser я бы сказал карринг ради замыканий. Просто в этом примере они не используются. Но это не значит, что это не нужно.
Из-за отсутствия примера где используется, публике кажется, что не нужно
@jsunderhood @RReverser я бы сказал карринг ради замыканий. Просто в этом примере они не используются. Но это не значит, что это не нужно.
13:45
@jsunderhood главная причина нечитаемости перла это неявные переменные (всякие $_, @_, $&). В js пока ничего подобного вроде не наблюдается.14:09
Расскажите, что сегодня случилось с PhantomJS? Вижу много знакомых людей в тикете: github.com/Medium/phantom…
16:39@jsunderhood битбакет лежал16:44
Полная история такая. Есть karma-phantomjs-launcher c peerDependency npmjs.org/phantomjs. Этот модуль скачивает phantomjs при install
16:46@jsunderhood этот модуль отличный пример как модули делать не надо. Он завязывается на чужую инфраструктуру, а значит ненадежный
16:47.@jsunderhood для себя я давно сделал заглушку github.com/just-boris/pha… которая отдает phantomjs установленный в системе. Работает с 2.0 тоже
16:49@jsunderhood еще вариант: github.com/eugeneware/pha… этот npm модуль хранит phantom внутри себя. Работает всегда, когда жив NPM (и весит 90Мб)
16:53По пятницам приходит рассылка javascriptweekly.com. Всегда есть что-то интересное. В этом выпуске рассказали про rollupjs.org
17:32@jsunderhood Rollup.js сборщик модулей, который умеет выкидывать части модулей, которые не используются. В Webpack2 будет так же.
17:33ProTip: Пользуйтесь скриптами pretest и posttest вместо того, чтобы писать в одну строку через && pic.twitter.com/JEfbnmIhyB
Завтра суббота, выходной, поговорим на свободную тему, отвечу на ваши вопросы. Доброй ночи!
20:43# Суббота 74 твита
@jsunderhood тоже советую эту рассылку, помогает быть в тренде и понимать что вообще творится в мире :)10:54
Давайте сегодня поговорим про взаимодействие с бэкендом. Нужно ли вообще общаться словами или документации по API достаточно?
11:05@jsunderhood поэтому общение важно, чтобы приходить к одному решению. Да, и еще не надо забывать что могут быть еще мобайлы11:14
Нашей команде повезло, и front и server-side разработчики сидят в петербургском офисе. Это позволяет оперативно решать разногласия
11:15Еще я стараюсь вникнуть в суть проблемы, когда джавист говорит, что не может добавить новое поле в ответ API.
11:16.@jsunderhood часто это признак, что вас расхождения в структуре, а модели клиента не матчатся на модели сервера.Лучше узнать об этом раньше
11:18@jsunderhood знать как работает бекенд очень важно, потому что ребятам с бекенда может быть просто впадло и они могут дурить фронтендщиков
Может быть, но сначала лучше проверить другие варианты
@jsunderhood знать как работает бекенд очень важно, потому что ребятам с бекенда может быть просто впадло и они могут дурить фронтендщиков
11:25
@jsunderhood тут еще надо сказать большое спасибо Node.js, его появление дало возможность Javascript`ерам понять как работает бекенд...
Не совсем. Можно написать свой сервер, но понять как работает IoC и зачем нужно много разных классов, это не поможет
@jsunderhood тут еще надо сказать большое спасибо Node.js, его появление дало возможность Javascript`ерам понять как работает бекенд...
11:27
@jsunderhood Мы даже сидим в одной комнате (команда небольшая).11:29
.@Rukomoynikov а как устроен процесс? Back и Front пилят в своих ветках или все сразу в master?
11:29@jsunderhood Мы только в свою, ребята из Back и в нашу тоже вливают новое API. Да, ветки отдельные. И у нас тоже Java.11:35
Еще сервер очень часто возвращает огромную модель, даже если от нее нужно три поля. Это решается в GraphQL+Relay, но что делать остальным?
11:36@jsunderhood jsonapi.org в помощь ))11:58
вот тут jsonapi.org/examples/ во втором примере показано как брать только то что нужно
@jsunderhood Переходить на них :)
Не так-то просто, если есть уже написано много кода, который дорого переписать
@jsunderhood Переходить на них :)
11:59
В Twitter появилась возможность создавать опросы. Давайте узнаем ваше коллективное мнение
14:18@jsunderhood Создай вопрос на табы vs пробелы, давно пора :)14:20
.@RReverser пробелы, о чем тут еще говорить
14:21@jsunderhood Потому и надо опрос, здесь периодически поднимается (напр. я за табы), но реплаи не так удобно :)14:22
Давайте узнаем!
14:22@jsunderhood Блин, TweetDeck их не показывает, только текст, если б не зашел в обычный, не догадался бы что здесь есть опрос.
Значит не обновился еще. Он вообще развивается?
@jsunderhood Блин, TweetDeck их не показывает, только текст, если б не зашел в обычный, не догадался бы что здесь есть опрос.
14:29
@RReverser в чем плюсы веб-версии перед тем, что на twitter.com? @jsunderhood14:39
@fuckingsun @jsunderhood Для меня основной плюс - табы под юзеров/сообщения/хештеги, удобно когда все на одном экране.14:39
@RReverser спасибо за обзор, пойду затестирую. знаете какие-нибудь ещё веб-сервисы для чтения твиттора? @jsunderhood15:00
К опросу можно добавить только 2 варианта ответа. Поэтому, устроить голосование за лучший js-фреймворк не получится
15:02@jsunderhood можно каждый написать и спрашивать: за или против15:06
@jsunderhood Придётся делать много опросов с двумя вариантами, а потом опросы с победителями и т. д. ;-)15:10
О Twitter! Место, где ты ограничен во всем: в числе символов, опций в опросе. Но я сейчас что-нибудь придумаю
15:11Какие вообще есть кандидаты? Я знаю Angular, Backbone+Marionette, Ember, React
15:12.@dcromster так-то можно и в контакте опрос сделать. Интересно как это оформить не покидая twitter
15:14Будет проще, если я напишу твит о каждом фреймворке, а вы поддержите своего фаворита через favourites. Комбо с неск. опросами ненаглядное
15:22Angular. Allure написан на версии 1.3. Плюсы – простота, к нам пришло много внешних контрибьюторов, которые легко делали нам фичи
15:23@jsunderhood например, нам добавили поддержку i18n и переводы на русский и португальский с нашим минимальным участием
15:23Backbone+Marionette. Хорошее комбо, его любят джависты, поскольку там тоже все на классах. Сейчас пишем на нем дополнение к Allure
15:25Ember.js Написал на нем небольшой hello world, но активно нигде не использую. Опасаюсь, что для него меньше плагинов, чем у других
15:26React. Изучаю его в рамках небольшого проекта на github: github.com/just-boris/rev… Регулярно спотыкаюсь о странные вещи, но в целом норм
15:28@jsunderhood например, я не вызывались JSX-компоненты. Как об этом спросить в сети: "Парни у меня html-тег не вызывается?"
15:30@jsunderhood ember addons - очень удобные. Легко подключать и испольозовать. Плюс есть рейтинг аддонов.15:31
==> emberaddons.com
React. Изучаю его в рамках небольшого проекта на github: github.com/just-boris/rev… Регулярно спотыкаюсь о странные вещи, но в целом норм
Ставим стар к одному из 4 твитов
twitter.com/jsunderhood/st…
twitter.com/jsunderhood/st…
twitter.com/jsunderhood/st…
React. Изучаю его в рамках небольшого проекта на github: github.com/just-boris/rev… Регулярно спотыкаюсь о странные вещи, но в целом норм
15:36
@jsunderhood вечером посчитаю и опубликую результат
15:36@jsunderhood лично я использовал аддон от Semantic.15:43
emberobserver.com/addons/semanti…
github.com/Semantic-Org/S…
Итак, мы узнали, что есть много UI-компонентов для Ember. А как обстоят дела с этим у React?
15:55@jsunderhood react-components.com например. Но есть приколы типа jQuery плагинов, завернутых в реакт-компоненты.15:58
@jsunderhood а вот для реакта. Кстати толкового меньше готового. говнецо в основном как для jquery16:01
.@Bardty @iamstarkov а github.com/react-bootstra… пробовали? Плюс Bootstrap в том, что он дает сразу много компонентов в одном стиле
16:02@jsunderhood @Bardty @iamstarkov я если честно, не сильно понимаю эти бс под компоненты. Что они дают? написать на 2 класса меньше? 1/2
Я в первую очередь пользуюсь им за то, что можно набросать форму вообще без единой строчки в css и будет красиво
@jsunderhood @Bardty @iamstarkov я если честно, не сильно понимаю эти бс под компоненты. Что они дают? написать на 2 класса меньше? 1/2
16:13
@blia @jsunderhood @Bardty @iamstarkov для реакте есть же material-ui.com16:26
@jsunderhood Пользуюсь им, очень нравится. Они полность переписали JS Бутстрапа. Но все проблемы CSS остались. @Bardty @iamstarkov17:18
@jsunderhood а как же meteor, knockout, riot, vue, derby, circle и миллионы других фраемворков. Этот опрос изначально не имеет смысла.17:20
.@hellbeast92 они не такие популярные. Но если в них есть какие-то особые достоинства, можно о них рассказать
17:24Еще есть aurelia.io Этот фреймворк разрабатывает человек из Angular, сбежавший от ада TypeScript в версии 2.0
17:26@jsunderhood в организации на Gihtub у них настоящая секта с однотипными аватарками pic.twitter.com/YXOI8I3TOY
@jsunderhood а что не так с TypeScript?17:45
.@dmitryshimkin c самим TypeScript все норм. А вот толстый слой абстракций, написанных на нем в Angular 2.0 это не ок
17:46@jsunderhood @dmitryshimkin я бы сказал наоборот, Angular 2 это то, что я ждал очень давно.17:53
.@Vitalliumm @dmitryshimkin а какие в нем преимущества?
17:55@jsunderhood @dmitryshimkin если в общем, они учли ошибки и косяки 1 версии, и ликвидровали их во 2 (например, наследование скоупов)17:57
.@Vitalliumm с этим соглашусь. Но в то же время наделали новых, усложнив архитектуру. Я уже видел этот подход в ExtJS и где он сейчас?
17:58Результаты голосования
Angular - 4 stars
Backbone - 1 star
Ember - 4 stars
React - 19 stars.
С победителем все ясно
А что произойдет через год или два? Останется ли React так же в топе, или появится новый, кто "решит все наши проблемы лучше предыдущих"?
18:52@jsunderhood тут могут быть два варианта развития событий: либо ФП становится необходимым минимум для js-dev, либо остается уделом немногих
18:53В этом отношении мне нравится Backbone. Ему уже 5 лет, а он все еще актуален
18:55@jsunderhood не. 2 года - это как раз итерация для фронтенда. Будет что-то новое популярно. Всегда так было.19:01
@jsunderhood Backbone хорош тем что его можно юзать не только для SPA.19:02
@blia Реакту уже больше двух лет. @jsunderhood19:06
.@sapegin да, я пробовал 2 года назад и попробовал сейчас. Изменилось многое. Даже не сам react, а его окружение типа redux
19:08@jsunderhood BB как jQuery. Он будет еще долго актуален за счет аддонов и сравнительно низкого порога входа.19:11
ProTip: подпишитесь на рассылку вопросов со stackoverflow по тегу ES6 и вы будете получать ответы на вопросы, которые у вас будут в будущем
19:18@jsunderhood а есть инфа, насколько фп сейчас распространено среди фронтендщиков?19:39
@fuckingsun @jsunderhood ни на сколько. В лучшем случае 5% о нем слышали, а 2% его пробовали.
Цифра сильно зависит от того, что считать за ФП, а что – нет
@fuckingsun @jsunderhood ни на сколько. В лучшем случае 5% о нем слышали, а 2% его пробовали.
19:52
@jsunderhood отн.интерес в сентябре 2015:20:11
react js - 96, flux js - 8, redux js - 6, prototypal inheritance - 2 pic.twitter.com/KI7x3plar6![]()
@fuckingsun @jsunderhood с этой статьи надо начинать изучать react.21:09
# Воскресенье 31 твит
Привет! Сегодня будет встреча SPB Frontend про React. Потранслирую, если будет что-то интересное
12:13.@jsunderhood пока для погружения в контекст почитаю статью: teropa.info/blog/2015/09/1…
12:14@jsunderhood &Co,посоветуйте i18n либу для Browser/Node, чтобы просто,удобно, .po умела и числительные (pluralization), и домены желательно.12:45
.@KSDaemon подойдет? formatjs.io
12:45Еще вчера мы затронули интересную тему готовых UI-kit. Есть два фаворита: Bootstrap и Material-UI. Есть еще варианты?
13:40.@jsunderhood еще пробовал semantic-ui.com, но у них тоже имена классов не по БЭМ, это может привести к проблемам в будущем
13:42@jsunderhood bem-components ?
Действительно выглядит интересно, тем более что там все классы по БЭМ
@jsunderhood bem-components ?
13:46
.@jsunderhood bem-components можно просто подключить как css и js с CDN Яндекса. Так я их интегрировал с Backbone: jsfiddle.net/z1cLLt4w/14/
13:50Из других UI-kits с БЭМ-классами знаю еще topcoat.io
13:54Использовать UI-kit без БЭМ-классов сложно. Свои стили хочется писать по БЭМ, и в проекте получается смесь французского с нижегородским
13:56Сегодня и @jsunderhood, и @cssunderhood обещают быть на митапе @spb_frontend. Осталось 40 минут, кстати.14:23
@jsunderhood foundation живой еще?15:03
«Главная идея React — компонентный подход», по-моему компоненты вообще мейнстрим фронтенда так же и в БЭМ и в Web Components
Потому что так проще вести разработку
«Главная идея React — компонентный подход», по-моему компоненты вообще мейнстрим фронтенда так же и в БЭМ и в Web Components
15:22
Таблица сравнения всех flux-фреймворков, но используйте Redux docs.google.com/spreadsheets/d…15:37
Говорят, тестировать в node лучше чем с Karma. Я в четверг говорил о том же pic.twitter.com/TMFZkqIsMB
У @andreypopp забавные слайды под углом. Удобно снимать с моего места pic.twitter.com/q4kVoIIGDR
CSS-модули обфусцируют имена классов. Не забудьте оставить метки по которым смогут кликать selenium-тесты, если они есть
16:25Redux появился как маленький пример для доклада @dan_abramov про Hot Reload — к вопросу о том, зачем нужно выступать на конференциях16:39
Знакомьтесь — это redux pic.twitter.com/qqrhQXiMlm
Стоит заметить, что у 2 из 3 докладчиков были слайды на английском. Вот такого уровня митапы устраивает @spb_frontend
17:17@mr_mig_by @jsunderhood @spb_frontend и каждый в зале понимал, что там написано! в этом суть!
Да, это иллюстрация к вопросу, нужен ли разработчику английский
@mr_mig_by @jsunderhood @spb_frontend и каждый в зале понимал, что там написано! в этом суть!
17:26
ProTip: поставьте себе f.lux: justgetflux.com это приложение подстраивает яркость монитора под время суток. Это полезно для глаз
18:19@jsunderhood да, и это хорошо, тоже пользую 👍18:30
@jsunderhood я себе поставила pace — остальные уродливые были( itunes.apple.com/ru/app/pace/id…18:41
@jsunderhood @boriscoder опубликовал архив jsunderhood.ru/boriscoder/18:49
Ну вот и все. С вами был @boriscoder, на Github записан как github.com/just-boris. Я продолжу писать свои protips уже в своем профиле
18:59Спасибо вам, что приняли участие. Вы хорошая и интересная публика! coub.com/view/8gdgx
19:00# Ссылки
github.com
- https://github.com/rluba/hamjest
- https://github.com/hamcrest/JavaHamcrest
- https://github.com/cucumber/cucumber-js
- https://github.com/just-boris/chest-behaviour
- https://github.com/webpack/memory-fs
- https://github.com/admc/wd
- https://github.com/groupon/webdriver-http-sync
- https://github.com/yandex-qatools/actions
- https://github.com/minimaxir/big-list-of-naughty-strings
- https://github.com/allure-examples/mocha-allure-example
- https://github.com/allure-framework/allure-core/wiki#generating-a-report
- https://github.com/unit-coverage/unit-coverage
- https://github.com/ariya/phantomjs/issues/12948
- https://github.com/segmentio/nightmare
- https://github.com/Jam3/hihat
- https://github.com/tmpvar/jsdom
- https://github.com/krasimir/atomus
- https://github.com/cheeriojs/cheerio
- https://github.com/thejameskyle/marionette-wires/blob/master/test/setup/node.js
- https://github.com/eirslett/frontend-maven-plugin
- https://github.com/bower/bower
- https://github.com/just-boris/jasmine-collection-matchers/pull/5
- https://github.com/Medium/phantomjs/issues/401
- https://github.com/just-boris/phantomjs
- https://github.com/eugeneware/phantomjs-bin
- https://github.com/just-boris/revive
- https://github.com/angular-ui/bootstrap
- https://github.com/Semantic-Org/Semantic-UI-Ember
- https://github.com/react-bootstrap/react-bootstrap
- https://github.com/jashkenas/backbone/issues/3560
- https://github.com/angular/angular/blob/master/modules/angular2/src/core/dom/abstract_html_adapter.dart
- https://github.com/rackt/redux-router/blob/master/src%2FReduxRouter.js#L73
- https://github.com/just-boris/repo-list/blob/master/react/index.html
- https://github.com/just-boris
other
- http://seleniumconf.org/
- http://habrahabr.ru/company/yandex/blog/268309/
- http://habrahabr.ru/company/yandex/blog/232697/
- http://www.youtube.com/playlist?list=PLJMRN_6MT0JYItlUeor7YRa0r6-lI8MMR
- https://gist.github.com/just-boris/178f3ab863c7a9971708
- https://gist.github.com/just-boris/6dd99e4d5386e6fcff19
- https://gist.github.com/just-boris/c4c23475f92e943d2037#file-search-page-js
- http://wallabyjs.com/
- http://xunitpatterns.com/
- http://angular.github.io/protractor/#/server-setup
- http://angular.github.io/protractor/#/debugging#taking-screenshots
- http://noteskeeper.ru/1209/
- https://code.google.com/p/selenium/wiki/WebDriverJs
- https://code.google.com/p/selenium/wiki/PageObjects
- http://webdriver.io/
- http://ci.qatools.ru/job/allure-core_master-deploy/lastSuccessfulBuild/Allure_report/index.html#/defects/a309af9292b527df
- https://www.npmjs.com/assertion-error
- http://jasmine.github.io/edge/ajax.html
- http://www.webjars.org/
- https://bitbucket.org/cofarrell/bower-maven-plugin
- http://npmjs.org/phantomjs
- http://javascriptweekly.com/
- http://rollupjs.org/
- http://jsonapi.org/
- http://jsonapi.org/examples/
- http://www.emberaddons.com/
- http://emberobserver.com/addons/semantic-ui-ember
- http://react.parts/
- http://react-components.com/
- http://benmccormick.org/2015/07/06/backbone-and-es6-classes-revisited/
- http://bootstrapcdn.com/
- http://material-ui.com/
- http://aurelia.io/
- http://www.google.com/trends/explore?hl=en-US&q=react+js,+flux+js,+redux+js,+prototypal+inheritance,+/m/02p97&date=10/2011+49m&cmpt=q&tz=Etc/GMT-3&tz=Etc/GMT-3&content=1
- https://medium.com/@zackargyle/stop-using-react-for-everything-c8297ac1a644#.7rwwvu561
- https://medium.com/@dan_abramov/mixins-are-dead-long-live-higher-order-components-94a0d2f9e750
- http://teropa.info/blog/2015/09/10/full-stack-redux-tutorial.html
- http://formatjs.io/
- http://semantic-ui.com/
- http://getuikit.com/
- http://jsfiddle.net/z1cLLt4w/14/
- http://topcoat.io/
- https://docs.google.com/spreadsheets/d/1TZPdUYDx6D1NWBXp_6NNtJ-NeVW6pudx3C9SkYSXI18/edit#gid=0
- https://mobile.twitter.com/jsunderhood/status/656179177629028352
- https://justgetflux.com/
- https://ru.wikipedia.org/wiki/
- https://getstandapp.com/
- https://itunes.apple.com/ru/app/pace/id918925707?l=en&mt=12
- https://jsunderhood.ru/boriscoder/
- https://coub.com/view/8gdgx