Mocha и Chai являются неотъемлемыми частями Test Driven Development (TDD), своего рода процесса разработки программного обеспечения. TDD требует, чтобы тесты были написаны до того, как начнется кодирование. Основная идея заключается в том, что разработчики пишут свои собственные тесты, имея в виду конечный продукт. Затем разработчик пишет наивный код, который, скорее всего, не пройдет эти тесты. Затем разработчик может постепенно улучшать свой код, чтобы в конечном итоге пройти тесты, и в результате продукт будет напоминать первоначальный замысел.

Но как разработчик может создать все эти тесты с нуля? Вот тут-то и появляются Mocha и Chai. Существует много библиотек и фреймворков для создания тестов, но эти два являются наиболее распространенными (особенно когда речь идет о тестировании Node.js) и очень хорошо дополняют друг друга. Отсюда их схожие тематические названия и логотипы.

Mocha — это среда тестирования JavaScript, она работает на Node.js и в браузере. Mocha также предоставляет важные крючки «describe» и «it». В то время как Chai — это библиотека утверждений, которая предоставляет важные ключевые слова «следует», «ожидает» и «утверждает». Я считаю, что было бы легко использовать Mocha с другой библиотекой утверждений, такой как Jasmine, но она не может работать отдельно. Давайте начнем создавать несколько быстрых тестов для описания одного из моих любимых предметов, еды и, в частности, бутербродов.

При создании тестов вы хотите сгруппировать их вместе, начав с хука описания, который принимает строку в качестве первого параметра и действует как заголовок для ваших тестов; второй параметр — это функция, которая будет охватывать остальную часть этого раздела. Их также можно вкладывать друг в друга, чтобы создать что-то похожее на заголовки и подзаголовки. Затем вы хотите создать любые переменные, которые вы будете использовать. Я считаю, что лучше всего создавать их внутри описания, но не внутри какого-либо другого хука или функции, чтобы к ним можно было получить доступ в этом разделе описания. Затем у нас есть beforeEach(), это еще один хук, который запускается перед любым другим описанием или тем, что может быть внутри большого описания. Точно так же вы можете использовать метод before(), если хотите, чтобы он запускался перед одним хуком it() или description; а также after() и afterEach() для запуска после каждого хука или после одного хука. Пришло время создать несколько хуков it()!

Итак, сначала у нас есть тест, который проверяет, является ли ключ poBoy на объекте сэндвичей Shrimp. Мы можем просто проверить нашу предыдущую картинку, чтобы сделать вывод, что это так. Далее у нас есть тест, который проверяет, какой рубен находится в объекте бутербродов. Мы не только проверяем, действительно ли это рубен из пастрами, но и проверяем, не является ли это рубеном из солонины, потому что мы любим копченое мясо. Далее мы позаботимся о том, чтобы все точно знали, что представляет собой бутерброд. Это не просто все, что можно есть.

Здесь мы ищем объект бутербродов, чтобы проверить, не пробрались ли туда каким-то образом макароны. Если это так, этот тест провалится, и мы будем вынуждены провести рефакторинг. К счастью, я не думаю, что макароны есть в наших бутербродах. Таким образом, рефакторинг не требуется.

В заключение, Mocha и Chai чрезвычайно важны для любого разработчика, который хочет заняться разработкой через тестирование. Оба они работают на Node.js и в браузере и предлагают множество полезных хуков и функций.