Тонкости тестирования и рефакторинг 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 кода

  • 899