Тонкости тестирования и рефакторинг JavaScript кода
Lviv nov 18, Eugene Safronov
Опытный TDD developer
Если сложно написать тест для
вашего блока кода, значить есть проблемы с реализацией
Иногда все зависит от точки зрения
Как проверить, что наш код работает?
Так или иначе нужно тестировать
Кто и что нас заставляет
писать тесты?
Требование заказчика
Инициатива команды
Совесть и чувство прекратсного
Линтинг
Модульное тестирование
Функциональное тестирование
Визуальное тестирование
e2e тестирование
Unit тесты
TDD and BDD
TDD — делать вещи правильно. BDD — делать правильные вещи.
suite('Counter', function() {
test('tick increases count to 1', function() {
var counter = new Counter();
counter.tick();
assert.equal(counter.count, 1);
});
});
describe('Counter', function() {
it('should increase count by 1 after calling tick', function() {
var counter = new Counter();
var expectedCount = counter.count + 1;
counter.tick();
assert.equal(counter.count, expectedCount);
});
});
F.I.R.S.T принципы
FIRST - тестов может быть много, поэтому каждый тест в отдельности должен быть быстрым
ISOLATED - тесты должны быть независимы друг от друга
REPEATABLE - тест должен давать один и тот же результат
SELF-VALID - результатом работы теста должен быть логический признак
TIMELY - тест должен быть написан своевременно
Заблуждение о Code coverage
Если тестами покрыто 50% кода нельзя утверждать, что удалось предотвратить 50% возможных дефектов
Рефакторинг кода
Все удачные программы изменяются
Ф. Брукс
Рефакторинг без тестов это очень страшно и больно
Существует 100500 причин для того чтобы сделать рефакторинг
Ваш код повторяется
Большие функции
Вложенные циклы, while, for, ....
Не удачные имена переменных/методов/классов
Много параметров в функциях
Необоснованный проброс параметров функций
Много глобальных переменных
Нарушение ООП практик
Когда следует рефакторить код?
Чтобы всё было и ничего за это не было!
Как же рефакторить безопасно?
Стоит сохранится
Тесты для критичной функциональности
Чаще сохраняйтесь и перезапускайте тесты
Правило бойскаута ;)
Рефакторинг не всегда приводит к улучшению качества
Рефакторинг во время разработки это более удачный момент
Вовремя понимать, что нужен рефакторинг и почва для его проведения
?
Тонкости тестирования и рефакторинг JavaScipt кода
By Evgeniy Safronov
Тонкости тестирования и рефакторинг JavaScipt кода
- 976