В этой статье я хочу представить вам новую библиотеку для тестирования AVA. Относительно новую, ей уже больше 2-х лет, и она обзавелась солидным количеством плагинов и конечно же сообществом которое ее развивает. Мы посмотрим на функционал библиотеки. Настроим окружение и напишем пару тестов, чтобы посмотреть на библиотеку в действии. В первую очередь библиотека предлагает скорость. Тесты запускаются параллельно, что дает ускорение выполнения тестов. В качестве примера приводится проект Pageres, в котором тестирование было перенесено на AVA, что дало увеличение почти в 3 раза(31 секунда было и 11 стало). Тесты не зависят от глобального состояния и от других тестов, что конечно же упрощает тестирование. Из коробки сразу идет использование es2015. Установить соответствующий npm модуль. Установим как зависимость для работы в конкретной папке. или глобально Настало время написать первый тест, возьмем пример из официального репозитория. И сохранить его как my-tests.js Сразу видим использование es2015 со стрелочными функциями, let и async. На мой взгляд, не обманули и действительно минималистичный синтаксис. Запускаем тесты И получаем результат Если мы хотим увидеть более подробную информацию о каждом тесте, мы можем использовать параметры для модуля Так же мы можем запустить watcher, чтобы разрабатывать в стиле TDD Поспотреть полный список параметров можно  Простой тест: Одна из самых распространенных ситуаций, когда нужно выполнить только один тест из всех: Пропуск теста, может понадобиться при рефакторинге, поиске ошибки: Вынесено на уровень API, что очень интересно. Можно сделать напоминалку прямо в тестах. Если нам нужно протестировать асинхронную часть кода, мы можем воспользоваться "cb": Параметр serial, позволит нам выполнять тесты в определенной последовательности. Например, мы хотим проверить существование конфигурационного файла. Если его нет, его нужно создать. Мы сделаем 2 теста, один будет создавать наш файл, а второй проверять. И нам удобней будет, чтобы они запускались именно последовательно. Написав такой код мы получаем И видим, что тесты запустились и закончились успешно. Но это не правильно, данных код не гарантирует выполнение в нужным нам порядке. Если мы сымитируем ситуацию когда файла еще нет, skip-ем тест создания, мы получим ошибку Чтобы гарантировать последовательность мы можем использовать параметр --serial или -s Или использовать Тест падает и мы об этом знаем. Мы можем об этом явно указать. В результате видим, что этот тест падает, но мы знаем об этом, и в идеале уже, что то делаем. Очень приятно, что мы можем совмещать параметры. Это позволяет нам реализовать любой сложности тесты и запускать в только необходимые и в нужном порядке. Для настройки окружения тестов есть before и after. Они будет выполнены один раз на старте выполнения тестов и в конце соответственно. Так же мы можем объявить несколько таких функций и они будет вызываться в порядке добавления Работает и для after. Если текст падает, after не вызываются. Чтобы исправить ситуацию нужно использовать модификатор always. Когда нам нужно настраивать окружение перед каждый тестом используем beforeEach и afterEach. Для них сохраняется поведение как и для before и after: порядок объявления и при ошибке в тесте after не вызываются(если нет always). Очень удобный deepEqual, и возможность пропустить проверку.
Отдельно рассмотрим вывод ошибок, он очень детальный. Что безусловно помогает отладке. До знакомства с AVA, я писал тесты на Jasmine. Мне нравится Behavior-Driven style. Для этого в AVA есть плагин ava-spec. После чего мы можем писать тесты так Мы можем кастомизировать информацию о наших тестах. Мне понравился tap-summary. Используем Сделаем функция, положим ее в отдельный файл, подключим и протестируем. Все работает, наш код из файла подключен и протестирован. Но есть проблема, наш код написал на ES5, а тесты ES6. Давайте исправим эту ситуацию. AVA из коробки использует Babeljs. И для нашего кода мы будет тоже использовать его. Настраиваем конфиги. и для AVA. Конфиг AVA находится прямо в package.json. Запускаем без изменений. AVA предоставляет отличную платформу для разработки тестов. В этой библиотеке есть все для этого: минималистичный стиль, быстрое выполнение, гибкость написания тестов, работа с тестами и окружением для них, информативный вывод ошибок. В сумме с возможностью кастомизировать как сам код тестов, исходя из предпочтений и необходимости, так и вывод информации по тестам. Хотелось бы чуть чуть рассказать про автора этой библиотеки. Это, наверное, один из самых известных в JS сообществе людей Синдре Сорхус. На его странице на github вы можете посмотреть на его проекты и в клад в сообщество. И/или вы можете познакомиться с ним как с человеком, на сколько это возможно в интернете, или задать вопрос/ы через ama — Ask me anything!. Полезные ссылки: