Теория 📔
July 4
Написание учебных тестов для лучшего понимания кода
Наткнулся на интересное для себя понятие "Учебные тесты". Они описаны в книге Джима Ньюкирка по TDD. Эти тесты нужны для того, чтобы понять, как работает внешний код или библиотека, они не обязательно являются частью окончательной тестовой базы, но служат важной цели - они помогают разработчикам исследовать и анализировать границы внешних библиотек и инструментов, которые они используют.
Основные моменты:
- Исследование поведения: Учебные тесты позволяют разработчикам исследовать поведение внешнего кода или библиотеки. Это особенно важно, когда документация неполная или неясная. Пишутся тесты, чтобы проверить, как ведет себя библиотека в различных ситуациях.
- Фиксация поведения: Эти тесты фиксируют текущее поведение внешнего компонента. Это может быть полезно для будущих ссылок или если поведение библиотеки изменится в будущем, можно будет сравнить с тем, как она работала ранее.
- Понимание интерфейсов: Учебные тесты помогают разработчикам понять, как правильно использовать интерфейсы внешнего кода. Они могут быть использованы для экспериментов с различными функциями и методами библиотеки, чтобы выяснить, как они работают.
- Безопасное удаление: После того, как учебные тесты выполнили свою задачу и разработчики поняли, как работает библиотека или внешний код, эти тесты могут быть удалены или сохранены для будущего использования.
Пример
Допустим, у нас есть внешняя библиотека для работы с датами, и мы хотим понять, как она работает. Мы можем написать несколько учебных тестов, чтобы исследовать ее поведение.
typescriptCopy codeimport { parse, format } from 'date-fns'; describe('Date-fns Library Learning Tests', () => { it('should correctly parse a date string', () => { const date = parse('2024-06-25', 'yyyy-MM-dd', new Date()); expect(date.getFullYear()).toBe(2024); expect(date.getMonth()).toBe(5); // Месяцы в JavaScript начинаются с 0 expect(date.getDate()).toBe(25); }); it('should correctly format a date', () => { const date = new Date(2024, 5, 25); // Июнь, 25, 2024 const formattedDate = format(date, 'yyyy-MM-dd'); expect(formattedDate).toBe('2024-06-25'); }); });