13. Редкие ошибки
• JS старается до последнего не бросать
ошибки и не валить ваш код
• Сравнения - никогда не бросают
ошибок, даже если сравниваются
разные типы
• Математические операции никогда не
бросают ошибок
• Можно обращаться к несуществующим
свойствам массивов и объектов
14. Сравнение
через ==
• Нестрогое сравнение
• Иногда будет приводить к
интересным результатам
• Может неявно приводить
один тип к другому
• Неиссякаемый источник
мемов и троллинга
• На практике же - сравнивать
массив и объект нужно чуть
реже чем никогда
15. Сравнение
через ===
• Строгое сравнение
• Скучней, работает
предсказуемо
• JS хейтеры не любят
вспоминать про него
• На практике - должно
использоваться в первую
очередь
16. Математика в JS
• Математические операции
никогда не бросают
исключений
• Даже деление на 0 не кидает
ошибку а возвращает Infinity
• Максимум что вы получите
NaN (not a number)
• Не делайте всю математику в
одной строке
• Проверяйте результат вашей
математики на NaN
17. Несуществующие свойства
• В JS можно обращаться к несуществующим
свойствам
• А в некоторых случаях - несуществующим
переменным
• Вы получите undefined, что опять же может вызвать
ошибки позже
22. Необязательные аргументы функций
• Если НЕ передать аргумент в функцию -
ошибка не возникнет
• Аргументы которые не передали будут
undefined
• Это возможно вызовет ошибки в
последующем коде
26. TypeScript
• Опциональная строгая типизация
• Более легкий переход из языков с
строгой типизацией (Java)
• Обратная совместимость с JavaScript
• Автодополнение
• Упрощенный рефакторинг
30. Функции обратного вызова
• Весь асинхронный API NodeJS по
умолчанию на коллбеках
• Хотя еще в 2009 году Promises были
добавлены в NodeJS, но их удалили - для
упрощения
• Коллбеки есть и в других языках
программирования (с похожими
проблемами)
35. Dependencies
• Стандартная поставка NodeJS очень
скудная - только самое необходимое
• Все остальное - через npm
• NPM registry - крупнейшее в мире
публичное хранилище библиотек (более
чем 700 тысяч)
• Но нужно тщательно выбирать что
устанавливаешь
37. Local dependencies
• NPM имеет возможность локальной
установки библиотек
• Это удобно если библиотека используется
только в одном проекте
• Библиотеки не будут доступны глобально
через терминал
41. import/export vs require
• NodeJS как серверная платформа,
нуждался в модульной системе
• Решением стал CommonJS с его -
require/module.exports
синтаксисом
• Но появился ES6 стандарт -
import/export с возможностью
асинхронного импорта
• В NodeJS 14 import/export теперь
stable
• TypeScript дает import/export в
подарок
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