23 ноября 2016 г.

Тесты

Я закончил рефакторинг новой конечной точки, чтобы ее можно было повторно использовать — чтобы она могла отвечать на разные запросы/конфигурации. Это было довольно сложно — выяснить, КАКИЕ функции извлечь и КАК сделать вещи более компонуемыми.

Первоначально я использовал объекты в качестве словаря:

const fetchFunc = fetchMap[config.name];

Однако я нашел его менее семантичным — он создавал почти ненужный шаг поиска функции выборки. Вместо этого я сделал следующее:

const result = fetch(config.name);

и я выполнил логику захвата соответствующей функции выборки внутри функции выборки.

Итак, множество таких мелочей — заняло немного времени, но я совершенно уверен, что оно того стоит, поскольку код становится более читабельным и пригодным для повторного использования.

Я также закончил писать тесты для этой новой конечной точки. Это тоже было весьма поучительно. Я написал много тестов, но сегодня я почувствовал себя немного по-другому — я лучше осознал цель, стоящую за тестами. В модульных тестах я убедился, что функции (контроллеры, действия) вызывают определенные функции (я заглушил их) и соответствующим образом обрабатывал ответ от этих функций.

Я также написал свой первый интеграционный тест! Я получил помощь от некоторых коллег и использовал существующие тесты в качестве эталона/шаблона. Этот тест проверял, правильно ли работает поток от контроллера к системе обмена сообщениями Kafka. Мне было очень интересно смоделировать среду, чтобы запустить ее «по-настоящему» в тестовой среде — запустить производителей и потребителей и увидеть, как журналы и сообщения действительно передаются. Точно так же я заглушил внешние вызовы API (нет необходимости брать что-то из S3) — и убедился, что заглушенный ответ обрабатывался должным образом. Очень утомительный, но продуктивный день.

Терминал

Я нашел НЕВЕРОЯТНО полезным направить все в Bunyan (или аналогичную библиотеку «prettifier»:

docker-compose up web | bunyan

Это сделало вывод/логирование системы более красивым и читабельным, с цветами и отступами. Потрясающий.