Читаемые и предсказуемые результаты теста

На 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.

Удачного тестирования!