Вы когда-нибудь вносили какие-то изменения в свой код только для того, чтобы потом узнать, что что-то сломалось? Возможно - да. Это неудивительно, особенно когда мы имеем дело с большими объемами кода. Одно зависит от другого, поэтому почти неизбежно, что в результате что-то в вашем коде сломается.

Что, если есть способ узнать, когда что-то сломается в результате внесенных вами изменений? Вероятно, вы подумали бы, что это было бы потрясающе. Код можно модифицировать, не беспокоясь о том, что что-то сломается. У вас будет меньше ошибок, и вы также потратите меньше времени на отладку.

Вот тут и приходит на помощь тестирование. Оно выявит любую проблему в вашем коде. Измените свой код, запустите несколько тестов, и если что-то сломается, вы сразу узнаете, в чем проблема и каким должен быть правильный результат.

Сегодня мы рассмотрим Mocha, одну из самых популярных сред тестирования в Node.js. Хотя это выглядит устрашающе, на самом деле начать с этого несложно. Мы расскажем, как настроить Mocha и некоторые другие основы Mocha, например, как группировать тесты и как использовать библиотеку утверждений. Хорошо, приступим!

Установка Мокко

Самый простой способ установить Mocha — через npm (предполагается, что Node.js уже установлен в вашей системе). Откройте терминал или командную строку в каталоге вашего проекта и выполните следующее:

npm init --yes
npm install mocha --save-dev

npm init — это простой способ создать файл package.json, а npm install mocha установит пакет Mocha, который позволит нам запускать наши тесты. Откройте файл package.json и в разделе «скрипты» измените его на следующее:

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

Таким образом, мы можем запустить mocha, просто набрав npm test в консоли.

Настройка структуры каталогов

Далее давайте создадим отдельный каталог с именем test, куда мы сможем поместить наши тесты. Это наиболее популярный способ работы с кодом JavaScript. В тестовой папке создайте файл с именем myFirstTest.js. Когда закончите, структура каталогов должна выглядеть так:

node_modules/
test/
 |-- myFirstTest.js
package.json
package-lock.json

После того, как все вышеперечисленное настроено, мы можем написать наш первый тест.

Тестирование

Наш первый тест будет из документации Mocha (см. https://mochajs.org/#getting-started). Откройте файл myFirstTest.js и скопируйте в него следующее:

var assert = require('assert');
describe('Array', function() {
  describe('#indexOf()', function() {
    it('should return -1 when the value is not present', function(){
      assert.equal([1,2,3].indexOf(4), -1);
    });
  });
});

Теперь в вашем терминале запустите свой первый тест, используя npm test, и вы должны увидеть:

Array
    #indexOf()
      √ should return -1 when the value is not present
1 passing (5ms)

ПОЗДРАВЛЯЕМ! Вы провели свой первый успешный тест. Далее, давайте разберем наш первый тест шаг за шагом.

Взгляд на наш первый тест

Как было сказано ранее, Mocha — это среда тестирования. Это означает, что он используется для организации и выполнения тестов. Есть два основных вызова функций, о которых нам нужно знать, когда мы пишем тест:

  1. describe() и
  2. it()

Мы видели оба в нашем примере выше. Опишем их более подробно:

  • describe() , иногда также называемый suit, — это просто способ сгруппировать наши тесты в Mocha. Тесты могут быть вложены в группы настолько глубоко, насколько это необходимо. describe() принимает два аргумента, первый из которых является именем тестовой группы, а второй — функцией обратного вызова.
describe('test_group_name', function() {
  // more nested describe(), or
  // tests
});

В нашем предыдущем примере у нас была тестовая группа с именем Array и внутри нее другая тестовая группа с именем #indexOf(). А внутри у нас был настоящий тестовый пример:

  • it() , иногда также называемый spec, указывает, что мы хотим протестировать. Оно должно быть написано в удобочитаемой форме, например, «должно возвращаться истина» или «должно равняться единице». it() также принимает два аргумента, первый из которых представляет собой строку, описывающую то, что мы тестируем, а второй — функцию обратного вызова с фактической проверкой.
it('should return something`, function() {
  // test case
});

Утверждение

В нашей среде тестирования мы используем библиотеки утверждений. Библиотека утверждений — это инструмент, который проверяет, что все правильно и соответствует ожиданиям. Другими словами, он проверяет результаты теста. Mocha позволяет использовать любую библиотеку утверждений. Популярные библиотеки, которые можно использовать:

В нашем примере выше мы использовали встроенный модуль утверждений Node.js. Поэтому мы включили следующее в начало нашего кода:

var assert = require('assert');

В assert включено несколько различных тестов утверждений. В нашем примере мы использовали assert.equal(actual, expected);, который проверяет нечеткое равенство между фактическим и ожидаемым значением с помощью оператора двойного равенства (то есть ==). Чтобы быть более конкретным, утверждение в нашем примере было таким:

it('should return -1 when the value is not present', function(){
      assert.equal([1,2,3].indexOf(4), -1)
});

Что он делает, так это проверяет, равно ли [1,2,3].indexOf(4) -1. Если фактическое значение равно ожидаемому, тест проходит. В противном случае тест завершается неудачно. В нашем примере тест пройден, что отразилось в выходном сообщении, после запуска npm test.

Array
    #indexOf()
      √ should return -1 when the value is not present
1 passing (5ms)

Вывод

Мы рассмотрели возможный способ тестирования в JavaScript с использованием популярной среды тестирования Mocha. Мы также показали, как его настроить, как сгруппировать тесты и как использовать утверждение в тестировании с помощью встроенного модуля в Node.js. Однако насколько полезно тестирование, если мы не можем использовать его для собственного кода. В следующем посте мы увидим, как интегрировать тесты в пользовательские файлы. А пока выпейте «мокко».

Ресурсы:

https://mochajs.org/