SlideShare uma empresa Scribd logo
1 de 52
Anti-patterns and hacks in
JavaScript
2020

xotabu4.github.io
Oleksandr Khotemskyi
• Software Development Engineer in Test

• Independent Contractor

• 9+ years in testing

• Primary stack - JavaScript
Agenda
• Дырки в языке

• Асинхронные костыли

• NodeJS и его велосипеды

• Квадратные колеса в MochaJS

• Горбы в WebdriverIO
Ключевые особенности
• Можно запускать практически везде

• Низкий порог входа

• Нацелен на асинхронность и события
https://2019.stateofjs.com/
Front End Frameworks
Front-end frameworks and libraries.
Back End Frameworks
JavaScript on the server.
https://2019.stateofjs.com/
Mobile & Desktop
JavaScript for mobile devices and desktop apps
https://2019.stateofjs.com/
Дырки в языке
Синтаксис и семантика языка
Редкие ошибки
• JS старается до последнего не бросать
ошибки и не валить ваш код

• Сравнения - никогда не бросают
ошибок, даже если сравниваются
разные типы

• Математические операции никогда не
бросают ошибок

• Можно обращаться к несуществующим
свойствам массивов и объектов
Сравнение
через ==
• Нестрогое сравнение

• Иногда будет приводить к
интересным результатам

• Может неявно приводить
один тип к другому

• Неиссякаемый источник
мемов и троллинга

• На практике же - сравнивать
массив и объект нужно чуть
реже чем никогда
Сравнение
через ===
• Строгое сравнение

• Скучней, работает
предсказуемо

• JS хейтеры не любят
вспоминать про него

• На практике - должно
использоваться в первую
очередь
Математика в JS
• Математические операции
никогда не бросают
исключений

• Даже деление на 0 не кидает
ошибку а возвращает Infinity

• Максимум что вы получите
NaN (not a number)

• Не делайте всю математику в
одной строке

• Проверяйте результат вашей
математики на NaN
Несуществующие свойства
• В JS можно обращаться к несуществующим
свойствам

• А в некоторых случаях - несуществующим
переменным

• Вы получите undefined, что опять же может вызвать
ошибки позже
Обращение к свойствам undefined объекта
Проверяйте!
До ES2020
Проверяйте!
ES2020
Проверка - nullish coalescence
Необязательные аргументы функций
• Если НЕ передать аргумент в функцию -
ошибка не возникнет

• Аргументы которые не передали будут
undefined

• Это возможно вызовет ошибки в
последующем коде
Проблема
Аргументы по умолчанию
TypeScript
• Опциональная строгая типизация

• Более легкий переход из языков с
строгой типизацией (Java)

• Обратная совместимость с JavaScript

• Автодополнение 

• Упрощенный рефакторинг
Асинхронные костыли
Функции обратного вызова
• Весь асинхронный API NodeJS по
умолчанию на коллбеках

• Хотя еще в 2009 году Promises были
добавлены в NodeJS, но их удалили - для
упрощения

• Коллбеки есть и в других языках
программирования (с похожими
проблемами)
Обработка асинхронных ошибок
Callback hell
http://callbackhell.com/
Решение - promisify+async/await
NodeJS и его велосипеды
JavaScript на сервере
Dependencies
• Стандартная поставка NodeJS очень
скудная - только самое необходимое

• Все остальное - через npm

• NPM registry - крупнейшее в мире
публичное хранилище библиотек (более
чем 700 тысяч)

• Но нужно тщательно выбирать что
устанавливаешь
1
2
3
Local dependencies
• NPM имеет возможность локальной
установки библиотек

• Это удобно если библиотека используется
только в одном проекте

• Библиотеки не будут доступны глобально
через терминал
Global dependencies
Global vs Local
Скрипты в package.json
сначала пытаются
использовать local
dependencies
Global vs Local
Скрипты в терминале будут
использовать GLOBAL
dependencies
import/export vs require
• NodeJS как серверная платформа,
нуждался в модульной системе

• Решением стал CommonJS с его -
require/module.exports
синтаксисом

• Но появился ES6 стандарт -
import/export с возможностью
асинхронного импорта

• В NodeJS 14 import/export теперь
stable

• TypeScript дает import/export в
подарок
Квадратные колеса в MochaJS
Стрелочные функции и this
Имена для
describe/it
Нужна дополнительная
библиотека
MochaJS
• Невозможно подключить больше одного
репортера из коробки

• Тяжело указать метаинформацию для
теста (номер тикета, автор, теги…)

• Тяжело формировать свою выборку
тестов для запуска
Затычки в WebdriverIO
Selenium Webdriver на JS
WebdriverIO
• Требует python и Fibers (courtines
для nodejs)

• Базовый минимальный комплект
чтобы написать простой тест - 55
мегабайт (protractor 18mb)

• При контейнеризации - нужен более
тяжелый контейнер с python
(например ubuntu-based)

• Время установки дольше, и
появляются ошибки специфичные
для операционной системы
WebdriverIO
• WebdriverIO требует чтобы в PageObjects
элементы были завернуты в функции

• Это нужно чтобы инициализация
элементов не произошла раньше времени

• Хотя в то же время WebdriverIO заявляет о
поддержке ленивых элементов

• Ошибки будут странными и неочевидными
–Bjarne Stroustrup, автор С++
«Есть всего два
типа языков программирования: те,
на которые люди всё время ругаются, и
те, которые никто не использует.»
2020 xotabu4.github.io

Mais conteúdo relacionado

Mais procurados

Фронтенд разработка без боли
Фронтенд разработка без болиФронтенд разработка без боли
Фронтенд разработка без болиAnton Piskunov
 
Мобильность на Колёсах: об инструментах и полезных вещах
Мобильность на Колёсах: об инструментах и полезных вещахМобильность на Колёсах: об инструментах и полезных вещах
Мобильность на Колёсах: об инструментах и полезных вещахITCrowd Almaty
 
Как анимировать тысячи объектов на карте и не подвесить браузер
Как анимировать тысячи объектов на карте и не подвесить браузерКак анимировать тысячи объектов на карте и не подвесить браузер
Как анимировать тысячи объектов на карте и не подвесить браузерDotNetConf
 
Платформа .NET Core глазами PHP-разработчика
Платформа .NET Core глазами PHP-разработчикаПлатформа .NET Core глазами PHP-разработчика
Платформа .NET Core глазами PHP-разработчикаГеоргий Драк
 
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...Ontico
 
My talk on Salt and Ansible from DevConf 2014
My talk on Salt and Ansible from DevConf 2014My talk on Salt and Ansible from DevConf 2014
My talk on Salt and Ansible from DevConf 2014Alex Chistyakov
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинSergey Xek
 
Современный фронтенд -- как не утонуть в море хайпа?
Современный фронтенд -- как не утонуть в море хайпа?Современный фронтенд -- как не утонуть в море хайпа?
Современный фронтенд -- как не утонуть в море хайпа?Vladimir Malyk
 
Badoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайнBadoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайнSergey Xek
 
Знакомство с WebAssembly
Знакомство с WebAssemblyЗнакомство с WebAssembly
Знакомство с WebAssemblyNikita Zimin
 
Инновации и JavaScript
Инновации и JavaScriptИнновации и JavaScript
Инновации и JavaScriptMax Klymyshyn
 
Performance engineering stories from #fdminicon Saransk
Performance engineering stories from #fdminicon SaranskPerformance engineering stories from #fdminicon Saransk
Performance engineering stories from #fdminicon SaranskAlex Chistyakov
 
Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)Pavel Chertorogov
 
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...Ontico
 
BeeGo для веб приложений, API и демонов
BeeGo для веб приложений, API и демоновBeeGo для веб приложений, API и демонов
BeeGo для веб приложений, API и демоновAnton Piskunov
 
JS Lab2017_Lightning Talks_PostCSS - there is a plugin for that
JS Lab2017_Lightning Talks_PostCSS - there is a plugin for thatJS Lab2017_Lightning Talks_PostCSS - there is a plugin for that
JS Lab2017_Lightning Talks_PostCSS - there is a plugin for thatGeeksLab Odessa
 
Sergey Cherebedov. Node.js+Drupal
Sergey Cherebedov. Node.js+DrupalSergey Cherebedov. Node.js+Drupal
Sergey Cherebedov. Node.js+DrupalDrupalSib
 

Mais procurados (20)

Фронтенд разработка без боли
Фронтенд разработка без болиФронтенд разработка без боли
Фронтенд разработка без боли
 
Мобильность на Колёсах: об инструментах и полезных вещах
Мобильность на Колёсах: об инструментах и полезных вещахМобильность на Колёсах: об инструментах и полезных вещах
Мобильность на Колёсах: об инструментах и полезных вещах
 
Как анимировать тысячи объектов на карте и не подвесить браузер
Как анимировать тысячи объектов на карте и не подвесить браузерКак анимировать тысячи объектов на карте и не подвесить браузер
Как анимировать тысячи объектов на карте и не подвесить браузер
 
Платформа .NET Core глазами PHP-разработчика
Платформа .NET Core глазами PHP-разработчикаПлатформа .NET Core глазами PHP-разработчика
Платформа .NET Core глазами PHP-разработчика
 
Using Ansible
Using AnsibleUsing Ansible
Using Ansible
 
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...
 
My talk on Salt and Ansible from DevConf 2014
My talk on Salt and Ansible from DevConf 2014My talk on Salt and Ansible from DevConf 2014
My talk on Salt and Ansible from DevConf 2014
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только один
 
Современный фронтенд -- как не утонуть в море хайпа?
Современный фронтенд -- как не утонуть в море хайпа?Современный фронтенд -- как не утонуть в море хайпа?
Современный фронтенд -- как не утонуть в море хайпа?
 
Badoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайнBadoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайн
 
Знакомство с WebAssembly
Знакомство с WebAssemblyЗнакомство с WebAssembly
Знакомство с WebAssembly
 
Инновации и JavaScript
Инновации и JavaScriptИнновации и JavaScript
Инновации и JavaScript
 
Migrate!
Migrate!Migrate!
Migrate!
 
Performance engineering stories from #fdminicon Saransk
Performance engineering stories from #fdminicon SaranskPerformance engineering stories from #fdminicon Saransk
Performance engineering stories from #fdminicon Saransk
 
Abf
AbfAbf
Abf
 
Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)
 
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
 
BeeGo для веб приложений, API и демонов
BeeGo для веб приложений, API и демоновBeeGo для веб приложений, API и демонов
BeeGo для веб приложений, API и демонов
 
JS Lab2017_Lightning Talks_PostCSS - there is a plugin for that
JS Lab2017_Lightning Talks_PostCSS - there is a plugin for thatJS Lab2017_Lightning Talks_PostCSS - there is a plugin for that
JS Lab2017_Lightning Talks_PostCSS - there is a plugin for that
 
Sergey Cherebedov. Node.js+Drupal
Sergey Cherebedov. Node.js+DrupalSergey Cherebedov. Node.js+Drupal
Sergey Cherebedov. Node.js+Drupal
 

Semelhante a ОЛЕКСАНДР ХОТЕМСЬКИЙ «Антипаттерни та велосипеди в JavaScript автоматизації» Online QADay 2020 #2

CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...CodeFest
 
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...Anthony Marchenko
 
Денис Чистяков — JavaScript на фронте и в тылу
Денис Чистяков — JavaScript на фронте и в тылуДенис Чистяков — JavaScript на фронте и в тылу
Денис Чистяков — JavaScript на фронте и в тылуYandex
 
Фронтенд в Яндексе
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в ЯндексеYandex
 
Фронтенд в Яндексе
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в ЯндексеYandex
 
Фронтенд в Яндексе
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в ЯндексеYandex
 
Актуальные технологии и тренды в веб-разработке
Актуальные технологии и тренды в веб-разработкеАктуальные технологии и тренды в веб-разработке
Актуальные технологии и тренды в веб-разработкеDenis Izmaylov
 
Jelastic PaaS for DevOps: Hybrid Cloud based on Microsoft Azure
Jelastic PaaS for DevOps: Hybrid Cloud based on Microsoft AzureJelastic PaaS for DevOps: Hybrid Cloud based on Microsoft Azure
Jelastic PaaS for DevOps: Hybrid Cloud based on Microsoft AzureDmitry Lazarenko
 
Что нового в ASP.NET 5
Что нового в ASP.NET 5Что нового в ASP.NET 5
Что нового в ASP.NET 5Microsoft
 
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработкиБэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработкиITCrowd Almaty
 
Кирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектовКирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектовOlesya_V
 
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Огляд екосистеми Selenium» QADay 2019
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Огляд екосистеми Selenium» QADay 2019ОЛЕКСАНДР ХОТЕМСЬКИЙ «Огляд екосистеми Selenium» QADay 2019
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Огляд екосистеми Selenium» QADay 2019GoQA
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Ontico
 
Delivering Native User Experience In Client Side Java Applications
Delivering Native User Experience In Client Side Java ApplicationsDelivering Native User Experience In Client Side Java Applications
Delivering Native User Experience In Client Side Java ApplicationsNikita Lipsky
 
Java cloud platforms. jee conf 2012
Java cloud platforms. jee conf 2012Java cloud platforms. jee conf 2012
Java cloud platforms. jee conf 2012Yuriy Ryashko
 
Java cloud platforms. jee conf 2012
Java cloud platforms. jee conf 2012Java cloud platforms. jee conf 2012
Java cloud platforms. jee conf 2012Yuriy Ryashko
 
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС «Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС 2ГИС Технологии
 
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs..."How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...Provectus
 
IBM Cloudant и Apache CouchDB: NoSQL базы данных эпохи облаков
IBM Cloudant и Apache CouchDB: NoSQL базы данных эпохи облаковIBM Cloudant и Apache CouchDB: NoSQL базы данных эпохи облаков
IBM Cloudant и Apache CouchDB: NoSQL базы данных эпохи облаковMaxim Zinal
 

Semelhante a ОЛЕКСАНДР ХОТЕМСЬКИЙ «Антипаттерни та велосипеди в JavaScript автоматизації» Online QADay 2020 #2 (20)

CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
 
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
 
Mobile web apps
Mobile web appsMobile web apps
Mobile web apps
 
Денис Чистяков — JavaScript на фронте и в тылу
Денис Чистяков — JavaScript на фронте и в тылуДенис Чистяков — JavaScript на фронте и в тылу
Денис Чистяков — JavaScript на фронте и в тылу
 
Фронтенд в Яндексе
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в Яндексе
 
Фронтенд в Яндексе
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в Яндексе
 
Фронтенд в Яндексе
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в Яндексе
 
Актуальные технологии и тренды в веб-разработке
Актуальные технологии и тренды в веб-разработкеАктуальные технологии и тренды в веб-разработке
Актуальные технологии и тренды в веб-разработке
 
Jelastic PaaS for DevOps: Hybrid Cloud based on Microsoft Azure
Jelastic PaaS for DevOps: Hybrid Cloud based on Microsoft AzureJelastic PaaS for DevOps: Hybrid Cloud based on Microsoft Azure
Jelastic PaaS for DevOps: Hybrid Cloud based on Microsoft Azure
 
Что нового в ASP.NET 5
Что нового в ASP.NET 5Что нового в ASP.NET 5
Что нового в ASP.NET 5
 
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработкиБэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
 
Кирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектовКирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектов
 
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Огляд екосистеми Selenium» QADay 2019
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Огляд екосистеми Selenium» QADay 2019ОЛЕКСАНДР ХОТЕМСЬКИЙ «Огляд екосистеми Selenium» QADay 2019
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Огляд екосистеми Selenium» QADay 2019
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
Delivering Native User Experience In Client Side Java Applications
Delivering Native User Experience In Client Side Java ApplicationsDelivering Native User Experience In Client Side Java Applications
Delivering Native User Experience In Client Side Java Applications
 
Java cloud platforms. jee conf 2012
Java cloud platforms. jee conf 2012Java cloud platforms. jee conf 2012
Java cloud platforms. jee conf 2012
 
Java cloud platforms. jee conf 2012
Java cloud platforms. jee conf 2012Java cloud platforms. jee conf 2012
Java cloud platforms. jee conf 2012
 
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС «Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
 
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs..."How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
 
IBM Cloudant и Apache CouchDB: NoSQL базы данных эпохи облаков
IBM Cloudant и Apache CouchDB: NoSQL базы данных эпохи облаковIBM Cloudant и Apache CouchDB: NoSQL базы данных эпохи облаков
IBM Cloudant и Apache CouchDB: NoSQL базы данных эпохи облаков
 

Mais de GoQA

АРТЕМ ГРИГОРЕНКО «Покращення процесів найму»
АРТЕМ ГРИГОРЕНКО «Покращення процесів найму»АРТЕМ ГРИГОРЕНКО «Покращення процесів найму»
АРТЕМ ГРИГОРЕНКО «Покращення процесів найму»GoQA
 
КАТЕРИНА ЖУПАН «Mobile Testing based on “ISTQB Mobile Application – Syllabus»
КАТЕРИНА ЖУПАН «Mobile Testing based on “ISTQB Mobile Application – Syllabus»КАТЕРИНА ЖУПАН «Mobile Testing based on “ISTQB Mobile Application – Syllabus»
КАТЕРИНА ЖУПАН «Mobile Testing based on “ISTQB Mobile Application – Syllabus»GoQA
 
МОРРІС-ВСЕСЛАВ ШОСТАК «Роль QA в індустрії програмного та апаратного забезпеч...
МОРРІС-ВСЕСЛАВ ШОСТАК «Роль QA в індустрії програмного та апаратного забезпеч...МОРРІС-ВСЕСЛАВ ШОСТАК «Роль QA в індустрії програмного та апаратного забезпеч...
МОРРІС-ВСЕСЛАВ ШОСТАК «Роль QA в індустрії програмного та апаратного забезпеч...GoQA
 
ОКСАНА ГОРОЩУК «Improving Quality Through Root Cause Analysis»
ОКСАНА ГОРОЩУК «Improving Quality Through Root Cause Analysis»ОКСАНА ГОРОЩУК «Improving Quality Through Root Cause Analysis»
ОКСАНА ГОРОЩУК «Improving Quality Through Root Cause Analysis»GoQA
 
ПАВЛО САФОНОВ «Як оцінити ефективність автоматизації»
ПАВЛО САФОНОВ «Як оцінити ефективність автоматизації»ПАВЛО САФОНОВ «Як оцінити ефективність автоматизації»
ПАВЛО САФОНОВ «Як оцінити ефективність автоматизації»GoQA
 
ГАННА КІЛІМОВА & СВІТЛАНА ЯКОВЛЄВА «ADA testing – те, що дуже на часі»
ГАННА КІЛІМОВА & СВІТЛАНА ЯКОВЛЄВА «ADA testing – те, що дуже на часі»ГАННА КІЛІМОВА & СВІТЛАНА ЯКОВЛЄВА «ADA testing – те, що дуже на часі»
ГАННА КІЛІМОВА & СВІТЛАНА ЯКОВЛЄВА «ADA testing – те, що дуже на часі»GoQA
 
СЕРГІЙ БРИТ «Як запускати тести з Playwright Java написані на Selenide. Не пе...
СЕРГІЙ БРИТ «Як запускати тести з Playwright Java написані на Selenide. Не пе...СЕРГІЙ БРИТ «Як запускати тести з Playwright Java написані на Selenide. Не пе...
СЕРГІЙ БРИТ «Як запускати тести з Playwright Java написані на Selenide. Не пе...GoQA
 
БОГДАН САВЧУК «IoT testing: Manual, Automation and Cyber Security techniques»
БОГДАН САВЧУК «IoT testing: Manual, Automation and Cyber Security techniques»БОГДАН САВЧУК «IoT testing: Manual, Automation and Cyber Security techniques»
БОГДАН САВЧУК «IoT testing: Manual, Automation and Cyber Security techniques»GoQA
 
ЕЛЬМІР ІСКАНДЕРОВ «Bulletproof Your Software: The Magic of Security Autotests»
ЕЛЬМІР ІСКАНДЕРОВ «Bulletproof Your Software: The Magic of Security Autotests»ЕЛЬМІР ІСКАНДЕРОВ «Bulletproof Your Software: The Magic of Security Autotests»
ЕЛЬМІР ІСКАНДЕРОВ «Bulletproof Your Software: The Magic of Security Autotests»GoQA
 
ІННА ДВОЙНІКОВА «Як вийти на Upwork та розширити горизонти QA»
ІННА ДВОЙНІКОВА «Як вийти на Upwork та розширити горизонти QA»ІННА ДВОЙНІКОВА «Як вийти на Upwork та розширити горизонти QA»
ІННА ДВОЙНІКОВА «Як вийти на Upwork та розширити горизонти QA»GoQA
 
КАТЕРИНА АБЗЯТОВА «Point of Growth: Transforming Challenges into Skill-Buildi...
КАТЕРИНА АБЗЯТОВА «Point of Growth: Transforming Challenges into Skill-Buildi...КАТЕРИНА АБЗЯТОВА «Point of Growth: Transforming Challenges into Skill-Buildi...
КАТЕРИНА АБЗЯТОВА «Point of Growth: Transforming Challenges into Skill-Buildi...GoQA
 
НАТАЛІЯ ТРОЙНІЧ «Редизайн всього продукту, коли на проекті залишилось два ман...
НАТАЛІЯ ТРОЙНІЧ «Редизайн всього продукту, коли на проекті залишилось два ман...НАТАЛІЯ ТРОЙНІЧ «Редизайн всього продукту, коли на проекті залишилось два ман...
НАТАЛІЯ ТРОЙНІЧ «Редизайн всього продукту, коли на проекті залишилось два ман...GoQA
 
РІНА УЖЕВКО «Вплив архітектури на стратегію тестування»
РІНА УЖЕВКО «Вплив архітектури на стратегію тестування»РІНА УЖЕВКО «Вплив архітектури на стратегію тестування»
РІНА УЖЕВКО «Вплив архітектури на стратегію тестування»GoQA
 
СЕРГІЙ РУСІНЧУК «Розкриття майстерності QA команд через KPI»
СЕРГІЙ РУСІНЧУК «Розкриття майстерності QA команд через KPI»СЕРГІЙ РУСІНЧУК «Розкриття майстерності QA команд через KPI»
СЕРГІЙ РУСІНЧУК «Розкриття майстерності QA команд через KPI»GoQA
 
КАТЕРИНА АБЗЯТОВА - Certify with confidence: ISTQB Foundation 4.0. Common err...
КАТЕРИНА АБЗЯТОВА - Certify with confidence: ISTQB Foundation 4.0. Common err...КАТЕРИНА АБЗЯТОВА - Certify with confidence: ISTQB Foundation 4.0. Common err...
КАТЕРИНА АБЗЯТОВА - Certify with confidence: ISTQB Foundation 4.0. Common err...GoQA
 
Слуцька Вікторія - Виступити і не наступити на граблі: Як виступати QA спеціа...
Слуцька Вікторія - Виступити і не наступити на граблі: Як виступати QA спеціа...Слуцька Вікторія - Виступити і не наступити на граблі: Як виступати QA спеціа...
Слуцька Вікторія - Виступити і не наступити на граблі: Як виступати QA спеціа...GoQA
 
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Планування стратегії розвитку тестування на проекті»
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Планування стратегії розвитку тестування на проекті»ОЛЕКСАНДР ХОТЕМСЬКИЙ «Планування стратегії розвитку тестування на проекті»
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Планування стратегії розвитку тестування на проекті»GoQA
 
ОЛЕКСІЙ ОСТАПОВ «Створення плагінів для pytest»
ОЛЕКСІЙ ОСТАПОВ «Створення плагінів для pytest»ОЛЕКСІЙ ОСТАПОВ «Створення плагінів для pytest»
ОЛЕКСІЙ ОСТАПОВ «Створення плагінів для pytest»GoQA
 
РОМАН ДУМАНСЬКИЙ «Testing the application in the Amazon Cloud»
РОМАН ДУМАНСЬКИЙ «Testing the application in the Amazon Cloud»РОМАН ДУМАНСЬКИЙ «Testing the application in the Amazon Cloud»
РОМАН ДУМАНСЬКИЙ «Testing the application in the Amazon Cloud»GoQA
 
ВЯЧЕСЛАВ САХАРОВ “Баги, хотфікси та воркераунди в космічній галузі. Вчимось н...
ВЯЧЕСЛАВ САХАРОВ “Баги, хотфікси та воркераунди в космічній галузі. Вчимось н...ВЯЧЕСЛАВ САХАРОВ “Баги, хотфікси та воркераунди в космічній галузі. Вчимось н...
ВЯЧЕСЛАВ САХАРОВ “Баги, хотфікси та воркераунди в космічній галузі. Вчимось н...GoQA
 

Mais de GoQA (20)

АРТЕМ ГРИГОРЕНКО «Покращення процесів найму»
АРТЕМ ГРИГОРЕНКО «Покращення процесів найму»АРТЕМ ГРИГОРЕНКО «Покращення процесів найму»
АРТЕМ ГРИГОРЕНКО «Покращення процесів найму»
 
КАТЕРИНА ЖУПАН «Mobile Testing based on “ISTQB Mobile Application – Syllabus»
КАТЕРИНА ЖУПАН «Mobile Testing based on “ISTQB Mobile Application – Syllabus»КАТЕРИНА ЖУПАН «Mobile Testing based on “ISTQB Mobile Application – Syllabus»
КАТЕРИНА ЖУПАН «Mobile Testing based on “ISTQB Mobile Application – Syllabus»
 
МОРРІС-ВСЕСЛАВ ШОСТАК «Роль QA в індустрії програмного та апаратного забезпеч...
МОРРІС-ВСЕСЛАВ ШОСТАК «Роль QA в індустрії програмного та апаратного забезпеч...МОРРІС-ВСЕСЛАВ ШОСТАК «Роль QA в індустрії програмного та апаратного забезпеч...
МОРРІС-ВСЕСЛАВ ШОСТАК «Роль QA в індустрії програмного та апаратного забезпеч...
 
ОКСАНА ГОРОЩУК «Improving Quality Through Root Cause Analysis»
ОКСАНА ГОРОЩУК «Improving Quality Through Root Cause Analysis»ОКСАНА ГОРОЩУК «Improving Quality Through Root Cause Analysis»
ОКСАНА ГОРОЩУК «Improving Quality Through Root Cause Analysis»
 
ПАВЛО САФОНОВ «Як оцінити ефективність автоматизації»
ПАВЛО САФОНОВ «Як оцінити ефективність автоматизації»ПАВЛО САФОНОВ «Як оцінити ефективність автоматизації»
ПАВЛО САФОНОВ «Як оцінити ефективність автоматизації»
 
ГАННА КІЛІМОВА & СВІТЛАНА ЯКОВЛЄВА «ADA testing – те, що дуже на часі»
ГАННА КІЛІМОВА & СВІТЛАНА ЯКОВЛЄВА «ADA testing – те, що дуже на часі»ГАННА КІЛІМОВА & СВІТЛАНА ЯКОВЛЄВА «ADA testing – те, що дуже на часі»
ГАННА КІЛІМОВА & СВІТЛАНА ЯКОВЛЄВА «ADA testing – те, що дуже на часі»
 
СЕРГІЙ БРИТ «Як запускати тести з Playwright Java написані на Selenide. Не пе...
СЕРГІЙ БРИТ «Як запускати тести з Playwright Java написані на Selenide. Не пе...СЕРГІЙ БРИТ «Як запускати тести з Playwright Java написані на Selenide. Не пе...
СЕРГІЙ БРИТ «Як запускати тести з Playwright Java написані на Selenide. Не пе...
 
БОГДАН САВЧУК «IoT testing: Manual, Automation and Cyber Security techniques»
БОГДАН САВЧУК «IoT testing: Manual, Automation and Cyber Security techniques»БОГДАН САВЧУК «IoT testing: Manual, Automation and Cyber Security techniques»
БОГДАН САВЧУК «IoT testing: Manual, Automation and Cyber Security techniques»
 
ЕЛЬМІР ІСКАНДЕРОВ «Bulletproof Your Software: The Magic of Security Autotests»
ЕЛЬМІР ІСКАНДЕРОВ «Bulletproof Your Software: The Magic of Security Autotests»ЕЛЬМІР ІСКАНДЕРОВ «Bulletproof Your Software: The Magic of Security Autotests»
ЕЛЬМІР ІСКАНДЕРОВ «Bulletproof Your Software: The Magic of Security Autotests»
 
ІННА ДВОЙНІКОВА «Як вийти на Upwork та розширити горизонти QA»
ІННА ДВОЙНІКОВА «Як вийти на Upwork та розширити горизонти QA»ІННА ДВОЙНІКОВА «Як вийти на Upwork та розширити горизонти QA»
ІННА ДВОЙНІКОВА «Як вийти на Upwork та розширити горизонти QA»
 
КАТЕРИНА АБЗЯТОВА «Point of Growth: Transforming Challenges into Skill-Buildi...
КАТЕРИНА АБЗЯТОВА «Point of Growth: Transforming Challenges into Skill-Buildi...КАТЕРИНА АБЗЯТОВА «Point of Growth: Transforming Challenges into Skill-Buildi...
КАТЕРИНА АБЗЯТОВА «Point of Growth: Transforming Challenges into Skill-Buildi...
 
НАТАЛІЯ ТРОЙНІЧ «Редизайн всього продукту, коли на проекті залишилось два ман...
НАТАЛІЯ ТРОЙНІЧ «Редизайн всього продукту, коли на проекті залишилось два ман...НАТАЛІЯ ТРОЙНІЧ «Редизайн всього продукту, коли на проекті залишилось два ман...
НАТАЛІЯ ТРОЙНІЧ «Редизайн всього продукту, коли на проекті залишилось два ман...
 
РІНА УЖЕВКО «Вплив архітектури на стратегію тестування»
РІНА УЖЕВКО «Вплив архітектури на стратегію тестування»РІНА УЖЕВКО «Вплив архітектури на стратегію тестування»
РІНА УЖЕВКО «Вплив архітектури на стратегію тестування»
 
СЕРГІЙ РУСІНЧУК «Розкриття майстерності QA команд через KPI»
СЕРГІЙ РУСІНЧУК «Розкриття майстерності QA команд через KPI»СЕРГІЙ РУСІНЧУК «Розкриття майстерності QA команд через KPI»
СЕРГІЙ РУСІНЧУК «Розкриття майстерності QA команд через KPI»
 
КАТЕРИНА АБЗЯТОВА - Certify with confidence: ISTQB Foundation 4.0. Common err...
КАТЕРИНА АБЗЯТОВА - Certify with confidence: ISTQB Foundation 4.0. Common err...КАТЕРИНА АБЗЯТОВА - Certify with confidence: ISTQB Foundation 4.0. Common err...
КАТЕРИНА АБЗЯТОВА - Certify with confidence: ISTQB Foundation 4.0. Common err...
 
Слуцька Вікторія - Виступити і не наступити на граблі: Як виступати QA спеціа...
Слуцька Вікторія - Виступити і не наступити на граблі: Як виступати QA спеціа...Слуцька Вікторія - Виступити і не наступити на граблі: Як виступати QA спеціа...
Слуцька Вікторія - Виступити і не наступити на граблі: Як виступати QA спеціа...
 
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Планування стратегії розвитку тестування на проекті»
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Планування стратегії розвитку тестування на проекті»ОЛЕКСАНДР ХОТЕМСЬКИЙ «Планування стратегії розвитку тестування на проекті»
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Планування стратегії розвитку тестування на проекті»
 
ОЛЕКСІЙ ОСТАПОВ «Створення плагінів для pytest»
ОЛЕКСІЙ ОСТАПОВ «Створення плагінів для pytest»ОЛЕКСІЙ ОСТАПОВ «Створення плагінів для pytest»
ОЛЕКСІЙ ОСТАПОВ «Створення плагінів для pytest»
 
РОМАН ДУМАНСЬКИЙ «Testing the application in the Amazon Cloud»
РОМАН ДУМАНСЬКИЙ «Testing the application in the Amazon Cloud»РОМАН ДУМАНСЬКИЙ «Testing the application in the Amazon Cloud»
РОМАН ДУМАНСЬКИЙ «Testing the application in the Amazon Cloud»
 
ВЯЧЕСЛАВ САХАРОВ “Баги, хотфікси та воркераунди в космічній галузі. Вчимось н...
ВЯЧЕСЛАВ САХАРОВ “Баги, хотфікси та воркераунди в космічній галузі. Вчимось н...ВЯЧЕСЛАВ САХАРОВ “Баги, хотфікси та воркераунди в космічній галузі. Вчимось н...
ВЯЧЕСЛАВ САХАРОВ “Баги, хотфікси та воркераунди в космічній галузі. Вчимось н...
 

ОЛЕКСАНДР ХОТЕМСЬКИЙ «Антипаттерни та велосипеди в JavaScript автоматизації» Online QADay 2020 #2

  • 1. Anti-patterns and hacks in JavaScript 2020 xotabu4.github.io
  • 2. Oleksandr Khotemskyi • Software Development Engineer in Test • Independent Contractor • 9+ years in testing • Primary stack - JavaScript
  • 3. Agenda • Дырки в языке • Асинхронные костыли • NodeJS и его велосипеды • Квадратные колеса в MochaJS • Горбы в WebdriverIO
  • 4.
  • 5. Ключевые особенности • Можно запускать практически везде • Низкий порог входа • Нацелен на асинхронность и события
  • 6.
  • 7.
  • 8.
  • 10. Back End Frameworks JavaScript on the server. https://2019.stateofjs.com/
  • 11. Mobile & Desktop JavaScript for mobile devices and desktop apps https://2019.stateofjs.com/
  • 12. Дырки в языке Синтаксис и семантика языка
  • 13. Редкие ошибки • JS старается до последнего не бросать ошибки и не валить ваш код • Сравнения - никогда не бросают ошибок, даже если сравниваются разные типы • Математические операции никогда не бросают ошибок • Можно обращаться к несуществующим свойствам массивов и объектов
  • 14. Сравнение через == • Нестрогое сравнение • Иногда будет приводить к интересным результатам • Может неявно приводить один тип к другому • Неиссякаемый источник мемов и троллинга • На практике же - сравнивать массив и объект нужно чуть реже чем никогда
  • 15. Сравнение через === • Строгое сравнение • Скучней, работает предсказуемо • JS хейтеры не любят вспоминать про него • На практике - должно использоваться в первую очередь
  • 16. Математика в JS • Математические операции никогда не бросают исключений • Даже деление на 0 не кидает ошибку а возвращает Infinity • Максимум что вы получите NaN (not a number) • Не делайте всю математику в одной строке • Проверяйте результат вашей математики на NaN
  • 17. Несуществующие свойства • В JS можно обращаться к несуществующим свойствам • А в некоторых случаях - несуществующим переменным • Вы получите undefined, что опять же может вызвать ошибки позже
  • 18. Обращение к свойствам undefined объекта
  • 22. Необязательные аргументы функций • Если НЕ передать аргумент в функцию - ошибка не возникнет • Аргументы которые не передали будут undefined • Это возможно вызовет ошибки в последующем коде
  • 25.
  • 26. TypeScript • Опциональная строгая типизация • Более легкий переход из языков с строгой типизацией (Java) • Обратная совместимость с JavaScript • Автодополнение • Упрощенный рефакторинг
  • 27.
  • 28.
  • 30. Функции обратного вызова • Весь асинхронный API NodeJS по умолчанию на коллбеках • Хотя еще в 2009 году Promises были добавлены в NodeJS, но их удалили - для упрощения • Коллбеки есть и в других языках программирования (с похожими проблемами)
  • 34. NodeJS и его велосипеды JavaScript на сервере
  • 35. Dependencies • Стандартная поставка NodeJS очень скудная - только самое необходимое • Все остальное - через npm • NPM registry - крупнейшее в мире публичное хранилище библиотек (более чем 700 тысяч) • Но нужно тщательно выбирать что устанавливаешь
  • 36. 1 2 3
  • 37. Local dependencies • NPM имеет возможность локальной установки библиотек • Это удобно если библиотека используется только в одном проекте • Библиотеки не будут доступны глобально через терминал
  • 39. Global vs Local Скрипты в package.json сначала пытаются использовать local dependencies
  • 40. Global vs Local Скрипты в терминале будут использовать GLOBAL dependencies
  • 41. import/export vs require • NodeJS как серверная платформа, нуждался в модульной системе • Решением стал CommonJS с его - require/module.exports синтаксисом • Но появился ES6 стандарт - import/export с возможностью асинхронного импорта • В NodeJS 14 import/export теперь stable • TypeScript дает import/export в подарок
  • 43.
  • 44. Стрелочные функции и this Имена для describe/it Нужна дополнительная библиотека
  • 45.
  • 46. MochaJS • Невозможно подключить больше одного репортера из коробки • Тяжело указать метаинформацию для теста (номер тикета, автор, теги…) • Тяжело формировать свою выборку тестов для запуска
  • 48. WebdriverIO • Требует python и Fibers (courtines для nodejs) • Базовый минимальный комплект чтобы написать простой тест - 55 мегабайт (protractor 18mb) • При контейнеризации - нужен более тяжелый контейнер с python (например ubuntu-based) • Время установки дольше, и появляются ошибки специфичные для операционной системы
  • 49. WebdriverIO • WebdriverIO требует чтобы в PageObjects элементы были завернуты в функции • Это нужно чтобы инициализация элементов не произошла раньше времени • Хотя в то же время WebdriverIO заявляет о поддержке ленивых элементов • Ошибки будут странными и неочевидными
  • 50.
  • 51.
  • 52. –Bjarne Stroustrup, автор С++ «Есть всего два типа языков программирования: те, на которые люди всё время ругаются, и те, которые никто не использует.» 2020 xotabu4.github.io