Представляем Suite Wrappers
Тесты должны быть удобочитаемыми и содержать минимум информации, необходимой для понимания тестового примера. Дополнительные данные и шаблон отвлекают читателя и затрудняют понимание того, как ведет себя система.
Сократить лишнюю информацию и шаблон можно разными способами. Один из них - использовать тестовые драйверы, которые содержат детали реализации КАК запускать тестируемый модуль и оставляют ЧЕМ делать тест самому. Другой метод - использовать тестовые наборы, чтобы переложить использование внешних ресурсов на набор с понятными API.
Драйверы, тестовые наборы и другие методы очень полезны и очень рекомендуются, однако они могут легко иметь неприятные последствия с огромным количеством шаблонов. Например, предположим, что вы хотите запустить базу данных (конечно, в памяти!). Вам нужно начать с подключения и закрыть его в конце, возможно, запустив код в блоках before
и after
- код, который не имеет прямого отношения к тестам и предназначен для его поддержки.
Тест становится утомительным и менее читаемым. подумайте о других способах использования, которые требуют гораздо большего количества шаблонов и кода запуска. Более того, чтобы создать другой костюм, который использует тот же шаблонный код, вы собираетесь скопировать / вставить тот же код, который вызывает дублирование кода и затрудняет обслуживание системы.
Что такое обертки костюмов?
Оболочки пакета могут помочь нам удалить шаблон, который не имеет прямого отношения к коду, а скорее относится к тестовым комплектам / другим используемым инструментам. Обертки костюмов удерживают шаблон подготовки и запускают его без проблем.
Реализация оберток костюмов тесно связана с тестовыми фреймворками, такими как mocha
, jest
и jasmine
, и предоставляет чистые API для тестирования. Для этого мы собираемся расширить набор операторами before
и after
, которые выполняются неявно.
Обертка костюма состоит из 3 частей:
- Test Framework Wrappers - предоставляет возможность обернуть функциональность тестовой среды конкретной реализацией.
- Оболочки тестовых наборов - используйте оболочку тестовой среды и расширьте их с помощью определенных функций тестовых наборов.
- Тестовый костюм - настоящий тест без лишнего шаблонного кода.
Оболочки Test Framework
Оболочки тестовой среды предоставляют функциональные возможности для создания пользовательских оболочек и представления пользовательских костюмов, включая функциональность тестового набора.
Например, оболочки мокко:
В приведенном выше примере мы экспортируем API, который получает элемент conf
, который будет содержать реализацию, которую мы хотим добавить к костюму. Учитывая beforeDesc
, мы можем запустить его до describe
блоков. То же самое касается afterDesc
, beforeIt
и afterIt
.
Обертки тестовых наборов
Оболочки тестового набора используют оболочки тестовой среды и предоставляют тестовый комплект с дополнительными функциями. Например, мы можем реализовать здесь функцию запуска и выключения внешней базы данных, которую мы хотим использовать, или любую другую функцию, которую мы хотим запустить до и после тестов.
Использование тестового костюма
В этом тестовом костюме используются обертки тестового набора, и они предоставляют тестам контекст и объект тестового набора, просто используя mySuit.describe
и mySuit.it
. Тест получает дополнительную функциональность без лишнего кода и делает тест более компактным.
Приведенный выше тест выглядит аккуратно и минималистично, однако многое происходит под капотом. Перед фактическим запуском теста выполняется before
блок тестового набора, затем запускается костюм beforeEach
, затем тест и, наконец, блок after
тестового набора.
Заявление об ограничении ответственности
Обертки костюмов, такие как тестовые драйверы и тестовые наборы, являются инструментами в нашем наборе инструментов. Мы должны использовать их с умом, поскольку они могут быть излишними для простых сценариев. Неправильное использование может привести к чрезмерной сложности и стать причиной невозможности поддержки кодовой базы.
Чтобы разумно использовать инструменты, я рекомендую писать тесты без них, а затем искать инструмент, который действительно улучшит код. Это то, что мы сделали, когда столкнулись с запутанным тестом - все другие инструменты, которые мы пробовали, не справились с задачей, а тест был более чистым, и, наконец, мы придумали оболочки для пакетов.
С одной стороны, использование оберток костюма может привести к использованию общих объектов, которые можно легко создать, и привести к сбою тестов без видимой причины. Обертки тестового набора должны запускать и очищать тестовый набор, а также поддерживать контекст, чтобы такого не происходило. С другой стороны, обертки костюма могут сохранять объекты в памяти и мягко очищать среду между каждым тестом, следовательно, запускать тесты быстрее.
Вы можете найти все примеры здесь:
https://gist.github.com/alonn24/e18fe297fcfd8ad5ca47ce020944d2d9
Спасибо за чтение!
Есть мнение по этому поводу? пожалуйста, прокомментируйте!
Я хотел бы услышать об этом.