Читаемые и предсказуемые результаты теста
На github: https://github.com/patoi/mocha-chai-async-test-pattern
«Сделайте вещи как можно проще, но не проще». - Альберт Эйнштейн
Сегодня я пытаюсь найти лучший способ тестирования с помощью async/await. Мой код простой, поэтому я думаю, что тест тоже будет простым. Во-первых, я написал свои тестовые примеры, основываясь на своем опыте в мире Java. Все тесты пройдены!
Вы думаете, что это здорово, но это не так.
Что случилось?
Я сделал пример кода для лучшего понимания.
Это очень простая функция, которую я буду тестировать с Mocha и Chai.
Наивное тестирование кода async/await
Код простой, поэтому я думаю, что тест тоже простой. Первый тестовый случай — «все в порядке».
Если в коде ошибка, то я получил ошибку бизнес-логики, а не ошибку теста (AssertionError). На экране это выглядит странно:
Имитация дефекта кода:замените isOK === true на isOK === false в testFunction.
Хм… Ладно, давай! Давайте посмотрим на следующий тестовый пример: тестирование reject(…)
Как видите, я допустил ошибку в тесте: перед «уловом» я не проверил ошибочный тест-кейс. Этот тест всегда пройден!
Итак, я исправил ошибку:
Я проверил еще раз и получил уродливую AssertionError:
AssertionError: ожидается, что «expect.fail()» будет равно «не в порядке»
Я решил просмотреть stackoverflow, сделать немного RTFM (мокко, чай, блоги) — после часа просмотра я не нашел решения для теста async/await. ВТФ (опять же)!
В качестве возможного решения я нашел chai-as-promise,но мне нравятся простые решения, поэтому я все еще искал решение.
Просто и лучше
Я пишу тест настолько просто, насколько это возможно, нет никакой новой тестовой зависимости (chai-as-promise) просто попробуйте-уловите-наконец-то.
Первый тестовый пример: тестирование reject()
Если в коде есть ошибки, я получаю красивую тестовую ошибку!
Это выглядит лучше, чем AssertionError: ожидается, что «expect.fail()» будет равно «не в порядке»
Хорошо, давайте посмотрим на другой тестовый пример: testing resolve(…)
Если в коде ошибка, я снова получаю красивую тестовую ошибку!
Конец игры
Наконец, тестовый шаблон очень прост:
Это:
- очень простой,
- новая тестовая зависимость бесплатно,
- читаемый и
- предсказуемый тестовый шаблон для async/await.
Удачного тестирования!