Тестирование — важный этап процесса разработки. Наличие комплексных тестов позволяет разработчикам безопасно вносить изменения, не опасаясь вызвать ошибки в другой части программы или непреднамеренные побочные эффекты. Тщательный набор тестов позволит быстро выявить эти ошибки и убедиться, что программа все еще находится в рабочем состоянии, когда будет выпущено исправление ошибки или новая функция. Цель состоит в том, чтобы выявить проблемы как можно быстрее, упростить отладку и исключить непреднамеренные шаги назад в функциональности.

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

Он использует Behavior Driven Development (BDD) для описания ожидаемого поведения способом, понятным всем участникам программного обеспечения, а не только тестировщикам и разработчикам. Таким образом, BDD расширяется от разработки через тестирование (TDD). Использование языка, близкого к общеупотребительному английскому, позволяет понять намерение другим, участвующим в том же проекте (менеджерам проектов, продавцам, владельцам продукта и т. д.), и читается проще, чем некоторые другие среды тестирования.

expect(2 + 2).to.equal(4);
expect(exampleArray).to.have.lengthOf(7);

Mocha выполняет тесты в указанном порядке и записывает результаты в терминал или браузер, в зависимости от того, как настроены тесты. Он использует модульное тестирование, которое разбивает поведение кода на небольшие фрагменты и проверяет каждое поведение на наименьшем значимом фрагменте независимого кода. Чтобы это происходило правильно, важно иметь независимые тестовые случаи. Каждый тестовый запуск не должен влиять на состояние программного обеспечения. Есть встроенные инструменты для очистки состояния ПО — с помощью stub или mock.

Предпосылки и настройка

Единственным предварительным условием для использования Mocha является установка узла и npm.

Чтобы использовать Mocha для проекта, используя npm, вы можете установить его глобально, используяnpm install -global mocha, или вы можете установить его как зависимость для одного проекта, находясь в корневой папке этого проекта, используяnpm install mocha.

Mocha ожидает каталог, созданный в проекте под названием «test», который конкретно содержит тестовые файлы. Если это было сделано, вы можете запускать тесты в терминале, используя подсказку mocha (или mocha --recursive, если вам нужно включить подкаталоги). Вы также можете включить скрипт в package.json, если хотите запускать тесты, используя сокращение npm test.

"scripts": {
  "test": "mocha"
}

Запуск тестов отобразит форматированный текст в терминале/консоли, чтобы отобразить сведения о том, прошли ли ваши тесты или нет для текущего кода.

Calculator Application
 Addition Functionality
  ✓ adds 2 numbers together
  ✓ adds multiple numbers together
 Subtraction Functionality
  ✓ subtracts the specified numbers
3 passing (9ms)

Опишите и это Ключевые слова

Mocha использует ключевое слово describe для пакетного набора тестов (группы тестов, относящихся к одной желаемой функциональности). Затем он использует ключевое слово it для пакетной обработки модульных тестов (единственные описания желаемого поведения, которые могут либо пройти, либо не пройти).

Первое ключевое слово описания принимает 2 аргумента: имя тестируемой программы и функцию. Эта функция состоит из каждого набора тестов, каждый из которых описан с помощью другого ключевого слова describe. Каждое из этих describe ключевых слов принимает 2 аргумента, описание тестируемой функциональности и функцию. Наконец, внутри этих блоков мы используем ключевое слово it, чтобы принять еще 2 аргумента. Первый — описание модульного теста, второй — еще одна функция. Тело этой функции содержит «сопоставитель», A.K.A. утверждение (из библиотеки Chai), которое проверяет ожидаемое поведение и допускает либо прохождение, либо сбой.

const expect = require("chai").expect;
const calculator = require("../app/calculator");
describe("Calculator Application", function() {
  describe("Addition Functionality", function() {
    it("adds two numbers together", function() {
      const total = calculator.add(2, 3);
      expect(total).to.equal(5);                  
    };
    it("adds multiple numbers together", function() {
      const total = calculator.add(1, 2, 3);
      expect(total).to.equal(6);
    });
  });
... // other test suites here
}

Заключительные примечания

Mocha можно эффективно использовать как для внешнего, так и для внутреннего тестирования, но он более эффективен для серверной части. Вы можете протестировать асинхронное поведение, используя промисы или шаблон async/await. Если вы хотите работать с поддельными данными и запросами, вы можете использовать фиктивный сервер, такой как chai-http, или другие подобные альтернативы.

Чтобы использовать это тестирование наиболее эффективно, тесты обычно пишутся перед фактическим кодом приложения. Это соответствует разработке, управляемой поведением (BDD), и гарантирует, что результат вашего приложения будет соответствовать ожидаемому поведению. Тесты должны быть ориентированы на ожидаемые результаты, а не на реализацию функциональности. Это создает приложения, которые выдерживают изменения, имеют предсказуемые результаты и мало ошибок.