Тестирование JavaScript с Мокко и Чай

  1. NPM (менеджер пакетов узлов)
  2. MOCHA.JS
  3. CHAI.JS
  4. calculator_chai_assert.js
  5. calculator_chai_expect.js
  6. Calculator_chai_should.js
  7. заголовок:
  8. описывает:
  9. Это:
  10. Крючки:
  11. Эксклюзивные тесты:
  12. Инклюзивные тесты:

Мы не обнаруживаем ничего нового, если говорим, что модульные тесты очень важны. Смею сказать, что они необходимы для обеспечения качества нашего продукта.

Во многих компаниях обычно сосредоточены на других типах тестов, таких как сквозные тесты, когда у них есть разработанный Javascript. С моей точки зрения, это распространенная ошибка, и из Paradigma мы хотим предложить способ ее исправить.

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

В этой статье мы собираемся создать проект с нуля, в котором мы будем использовать: НПМ , mocha.js и chai.js , Конечная цель состоит в том, чтобы узнать наиболее важные утилиты, предлагаемые Мокко и Чаем, чтобы применить их к нашему разработанному проекту.

NPM (менеджер пакетов узлов)

Это наиболее используемый менеджер пакетов Javascript для Node.js. Он предоставляет практически любую доступную библиотеку, просто выполнив команду. Это позволяет нам работать с новой библиотекой в ​​считанные секунды.

MOCHA.JS

Mocha - это тестовая среда JavaScript, которая работает на Node.js. Это дает нам возможность создавать как синхронные, так и асинхронные тесты очень простым способом. Он предоставляет нам множество утилит для выполнения и составления отчетов о тестах.

CHAI.JS

Это библиотека утверждений, которая может быть в паре с любой средой тестирования JavaScript. У Chai есть несколько интерфейсов: утверждай , ожидай и должен , что позволяет разработчику выбирать стиль, который наиболее удобен для чтения и удобен при разработке своих тестов:

Assert: assert.typeOf (foo, 'string', 'foo is a string'); assert.equal (foo, 'bar', 'foo равно `bar`); assert.lengthOf (foo, 3, значение 'foo`s имеет длину 3'); Ожидайте: ожидаем (foo) .to.be.a ('строка'); ожидаем (foo) .to.equal ('bar'); ожидайте (foo) .to.have.length (3); Следует: foo.should.be.a ('строка'); foo.should.equal ('bar'); foo.should.have.length (3);

Как видно из примеров, каждый из них имеет свою структуру, что не мешает нам получать одинаковые результаты независимо от того, какой из них мы используем.

Как только актеры, с которыми мы собираемся работать, представлены, мы можем перейти к самой технической части и начать с нашего проекта.

Прежде всего, мы установили npm, чтобы упростить управление нужными нам библиотеками:

sudo apt-get установить npm

Мы создаем каталог нашего проекта:

mkdir tests_mocha_chai

Мы создаем файл package.json. Этот файл используется npm для хранения информации о нашем проекте, такой как зависимости.

cd tests_mocha_chai npm init

Далее мы установим библиотеку mocha.js через npm . Мы добавляем в команду параметр -save, чтобы она сохраняла эту библиотеку в файле package.json .

npm установить мокко - сохранить

На данный момент у нас есть все, что нам нужно, поэтому давайте наденем комбинезон и начнем с нашего кода.

Прежде всего мы собираемся создать функцию, для которой мы определим модульные тесты на следующих шагах. Для этого мы создаем файл calculator.js внутри папки, которую мы будем называть «app», которую мы создадим в корне нашего проекта:

exports.addTested = function (value) {var result = value + "test"; вернуть результат; };

С помощью этого кода у нас будет довольно простая функция, которая просто получает параметр и возвращает его, добавляя строку «test» в конец.

У нас уже есть код для тестирования, поэтому давайте перейдем к моей любимой части - тестам.
Первое, что мы сделаем, это установим зависимость chai.js так же, как мы установили на предыдущих шагах mocha.js :

npm install chai --save

Ранее мы говорили о трех вариантах при разработке тестов с Chai: утверждать , ожидать , следует . Чтобы не фокусироваться ни на одном из них, давайте посмотрим, как протестировать функцию « addTested » с каждым из них.

Чтобы не фокусироваться ни на одном из них, давайте посмотрим, как протестировать функцию « addTested » с каждым из них

Для этого мы создадим папку « test » в корне нашего проекта и внутри нее файл для каждого из них:

calculator_chai_assert.js

var assert = require ("chai"). assert; var calculator = require ("../ app / calculator"); description («Тесты калькуляторов с использованием интерфейса ASSERT из модуля CHAI:», function () {description («Проверить addTested Function:», function () {it («Проверить возвращаемое значение с помощью: assert.equal (value, 'value')) : ", function () {result = calculator.addTested (" text "); assert.equal (результат," текст проверен ");}); it (" Проверить возвращаемое значение с помощью: assert.typeOf (value, 'value) '): ", function () {result = calculator.addTested (" text "); assert.typeOf (result," string ");}); it (" Проверить возвращаемое значение с помощью: assert.lengthOf (value,' value '): ", function () {result = calculator.addTested (" text "); assert.lengthOf (result, 11);});});});

calculator_chai_expect.js

var ожидают = требуют ("чай"). ожидают; var calculator = require ("../ app / calculator"); description ("Тесты калькуляторов с использованием интерфейса EXPECT из модуля CHAI:", function () {description ("Проверка addTested Function:", function () {it ("Проверка возвращаемого значения с использованием: Ожидайте (значение) .to.equal (' value '): ", function () {result = calculator.addTested (" text "); ожидаем (результат) .to.equal (" текст проверен ");}); it (" Проверьте возвращаемое значение с помощью: Ожидаем ( value) .to.be.a ('value')): ", function () {result = calculator.addTested (" text "); ожидаем (результат) .to.be.a ('string');}) ; it ("Проверить возвращаемое значение с помощью: ожидаем (значение) .to.have.lengthOf (значение):", function () {result = calculator.addTested ("text"); ожидаем (результат) .to.have. lengthOf (11);});}); });

Calculator_chai_should.js

var should = require ("chai"). should (); var calculator = require ("../ app / calculator"); description («Тесты калькуляторов с использованием интерфейса SHOULD из модуля CHAI:», function () {description («Проверить addTested Function:», function () {it («Проверить возвращаемое значение с помощью: value.should.equal (value):») , function () {result = calculator.addTested ("text"); result.should.equal ("text test");}); it ("Проверить возвращаемое значение с помощью: value.should.be.a ('value '): ", function () {result = calculator.addTested (" text "); result.should.be.a (' string ');}); it (" Проверить возвращаемое значение с помощью: Ожидайте (значение). to.have.lengthOf (value): ", function () {result = calculator.addTested (" text "); result.should.have.lengthOf (11);});});});

Наконец у нас созданы тестовые файлы. Теперь поговорим о его структуре:

заголовок:

В верхней части файла мы видим что-то похожее на:

var assert = require ("chai"). assert; var calculator = require ("../ app / calculator");

Это просто импорт, необходимый для работы из нашего тестового файла. Первый - импортировать интерфейс Chai, с которым мы будем работать, а второй - импортировать файл калькулятора, который включает в себя функцию, которую мы собираемся протестировать.

описывает:

Мы используем этот элемент для определения блоков связанных тестов. Мы можем объединить несколько «описаний», если посчитаем это необходимым для нашей тестовой структуры.

Это:

Каждый элемент это будет тест. Мы можем определить все тесты (это), которые необходимы в пределах описанного элемента. Тесты можно разделить на несколько элементов типа «описывает». Это полезно, если мы хотим различать несколько тестовых блоков в одном файле.

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

Мы продолжаем продвижение в нашем проекте. У нас уже есть и функция, и несколько тестов, которые проверят, что она работает отлично.
Поскольку мы находимся в проекте с npm, мы будем использовать возможности, которые он предлагает нам для выполнения наших тестов. Для этого мы отредактируем файл package.json и дадим значение параметру «test», который по умолчанию мы найдем пустым:

"test": "./node_modules/.bin/mocha --reporter spec"

После обновления файла package.json мы можем запустить тесты командой:

тест npm

После выполнения команды мы должны получить выходные данные, в которых показаны результаты каждого из выполненных тестов и полная продолжительность тестов.

До сих пор мы видели структуру тестов, которые ее описывают, но Mocha предлагает нам гораздо больше вариантов.

Крючки:

Они размещены внутри элемента типа description и очень полезны для чего-то такого простого и необходимого, как инициализация переменной, очистка базы данных ...

before (function () {// Выполняется перед всеми тестами блока}); after (function () {// Выполняется после всех тестов блока}); beforeEach (function () {// Выполняется перед каждым блоком теста}); afterEach (function () {// Запускать после каждого теста блока});

Эксклюзивные тесты:

Функция only () позволяет выполнять только блок или тестовый пример, к которому мы его добавляем. Это очень полезно, если у нас есть большое количество тестов, и по какой-то причине мы хотим выполнить часть из них или даже один тест.

description.only ('блок только с вызовом функции', function () {it. ('test1, function () {// ...}); it. (' test2, function () {// ... })});

В этом случае, если мы выполним тесты. Тесты 1 и 2 будут выполнены.

описывает («блок, который включает тест только с вызовом функции», function () {it.only ('test1, function () {// ... it. (' test2, function () {// ...});} );

В этом другом случае, если мы выполним тесты, будет выполнен только тест 1.

Инклюзивные тесты:

Можно сказать, что функция skip () ведет себя противоположно only (). С помощью skip мы можем сделать так, чтобы во время выполнения блок или даже тест не выполнялись внутри него. Это очень полезно, если в какой-то момент у нас есть блок тестов или один тест, который мы не хотим запускать по какой-либо причине.

description.skip ('блок только с вызовом функции', function () {it. ('test1, function () {// ...}); it. (' test2, function () {// ... })});

В этом случае тест не будет выполнен.

description («блок, который включает в себя тест только с вызовом функции», function () {it.skip ('test1, function () {// ... it. (' test2, function () {// ...});} );

В этом только тест 2 будет выполнен.

Надеюсь, я показал вам новый путь. Путь, который без сомнения поможет вам улучшить качество ваших проектов Javascript. Если у вас нет проекта, где его реализовать, я надеюсь, что он вам понравился и у вас есть червь для продолжения исследования предмета.

Я оставляю код, который мы использовали в примерах, плюс некоторые добавленные в моем хранилище ,

«Есть два способа написания программ без ошибок; только третьи работы » - Алан Дж. Перлис