23 ноября 2016 г.
Тесты
Я закончил рефакторинг новой конечной точки, чтобы ее можно было повторно использовать — чтобы она могла отвечать на разные запросы/конфигурации. Это было довольно сложно — выяснить, КАКИЕ функции извлечь и КАК сделать вещи более компонуемыми.
Первоначально я использовал объекты в качестве словаря:
const fetchFunc = fetchMap[config.name];
Однако я нашел его менее семантичным — он создавал почти ненужный шаг поиска функции выборки. Вместо этого я сделал следующее:
const result = fetch(config.name);
и я выполнил логику захвата соответствующей функции выборки внутри функции выборки.
Итак, множество таких мелочей — заняло немного времени, но я совершенно уверен, что оно того стоит, поскольку код становится более читабельным и пригодным для повторного использования.
Я также закончил писать тесты для этой новой конечной точки. Это тоже было весьма поучительно. Я написал много тестов, но сегодня я почувствовал себя немного по-другому — я лучше осознал цель, стоящую за тестами. В модульных тестах я убедился, что функции (контроллеры, действия) вызывают определенные функции (я заглушил их) и соответствующим образом обрабатывал ответ от этих функций.
Я также написал свой первый интеграционный тест! Я получил помощь от некоторых коллег и использовал существующие тесты в качестве эталона/шаблона. Этот тест проверял, правильно ли работает поток от контроллера к системе обмена сообщениями Kafka. Мне было очень интересно смоделировать среду, чтобы запустить ее «по-настоящему» в тестовой среде — запустить производителей и потребителей и увидеть, как журналы и сообщения действительно передаются. Точно так же я заглушил внешние вызовы API (нет необходимости брать что-то из S3) — и убедился, что заглушенный ответ обрабатывался должным образом. Очень утомительный, но продуктивный день.
Терминал
Я нашел НЕВЕРОЯТНО полезным направить все в Bunyan (или аналогичную библиотеку «prettifier»:
docker-compose up web | bunyan
Это сделало вывод/логирование системы более красивым и читабельным, с цветами и отступами. Потрясающий.