Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/seryiza/tdd-kata-1
My solution for TDD Kata 1 by Roy Osherove
https://github.com/seryiza/tdd-kata-1
jest learning-by-doing roy-osherove tdd tdd-kata test-driven-development typescript
Last synced: 19 days ago
JSON representation
My solution for TDD Kata 1 by Roy Osherove
- Host: GitHub
- URL: https://github.com/seryiza/tdd-kata-1
- Owner: Seryiza
- License: mit
- Created: 2019-07-13T13:02:02.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2023-01-04T04:30:05.000Z (about 2 years ago)
- Last Synced: 2024-11-22T16:13:48.257Z (3 months ago)
- Topics: jest, learning-by-doing, roy-osherove, tdd, tdd-kata, test-driven-development, typescript
- Language: TypeScript
- Homepage:
- Size: 656 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 12
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# TDD Kata 1
Решение [задачи от Roy Osherove](https://osherove.com/tdd-kata-1/), используя методологию TDD.
Использован [Jest](https://facebook.github.io/jest/). Получил мотивацию сделать это, прочитав [статью на FCC](https://www.freecodecamp.org/news/a-quick-introduction-to-test-driven-development-with-jest-cac71cb94e50/).
## Как запустить тесты?
```bash
$ npm run test
```## Что я получил?
Я получил крутой (почти первый) опыт работы с TDD. Увидел свои ошибки и постарался сделать выводы.
## Мои ошибки
* **Преждевременные обобщение и оптимизация.** Я слишком рано переходил от этапа "одна вещь" -> "неопределённо много вещей". Это позволяло мне в будущем (в последующих тестах) экономить время, но это "будущее" в бизнес-проектах может и не наступить.
* (Тест #1) К концу написания реализации, у меня уже был код, обрабатывающий неопределённое количество чисел. Тут стоило сделать нечто вроде `[a, b] = numbers.split(',')`, но я перешёл сразу к функциональному подходу через `.split(...).map(...).reduce(...)`. Некритично, наверное. К тому же мне кажется это больше правильным решением, чем не.
* (Тест #4) В описании теста не было уточнения, что разделитель состоит из одного символа. Может это подразумевалось, но я не уловил `:(`. Из-за этого сделал реализацию с поддержкой любой длины, которую потом дважды переписывал по ходу следующих заданий.
* **Выбор микроскопа и молотка.** В частности выбор между прямой обработки строк и использованием регулярных выражений. После рефакторинга у меня активно используются регулярные. Не думаю, что это плохая идея, но в реальных проектах я бы их спрятал подальше за абстракциями.
* **Невнимательность.**
* (Тест #?) Отвлёкся, переключился на другие дела, потерял контекст, забыл написать тест перед кодом. Упс.## Выводы
* **TDD - относительна простая концепция.** Насколько простая, что даже сложно её соблюдать: думаю, если взять TDD за привычку, то это неизбежно повлияет на взгляды программирования.
* **TDD принуждает писать тесты.** Потому что сначала тесты, потом код. Я всё ещё могу себе позволить написать код и отложить написание тестов на потом. Не стоит даже говорить, насколько тесты помогают при рефакторинге.