Вы когда-нибудь вносили какие-то изменения в свой код только для того, чтобы потом узнать, что что-то сломалось? Возможно - да. Это неудивительно, особенно когда мы имеем дело с большими объемами кода. Одно зависит от другого, поэтому почти неизбежно, что в результате что-то в вашем коде сломается.
Что, если есть способ узнать, когда что-то сломается в результате внесенных вами изменений? Вероятно, вы подумали бы, что это было бы потрясающе. Код можно модифицировать, не беспокоясь о том, что что-то сломается. У вас будет меньше ошибок, и вы также потратите меньше времени на отладку.
Вот тут и приходит на помощь тестирование. Оно выявит любую проблему в вашем коде. Измените свой код, запустите несколько тестов, и если что-то сломается, вы сразу узнаете, в чем проблема и каким должен быть правильный результат.
Сегодня мы рассмотрим 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 — это среда тестирования. Это означает, что он используется для организации и выполнения тестов. Есть два основных вызова функций, о которых нам нужно знать, когда мы пишем тест:
describe()
и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 позволяет использовать любую библиотеку утверждений. Популярные библиотеки, которые можно использовать:
- должен.js
- ожидание.js
- чай
- лучше утверждать
- "непредвиденный"
В нашем примере выше мы использовали встроенный модуль утверждений 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. Однако насколько полезно тестирование, если мы не можем использовать его для собственного кода. В следующем посте мы увидим, как интегрировать тесты в пользовательские файлы. А пока выпейте «мокко».