Тестирование 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. Если у вас нет проекта, где его реализовать, я надеюсь, что он вам понравился и у вас есть червь для продолжения исследования предмета.

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

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

Похожие

Flame: супер-шпион для Skype с поддержкой Bluetooth - это Harbi
Новости от исследователей кибербезопасности в этот День памяти звучали как сюжетное устройство из научно-фантастического фильма. Сверхсекретная программа наблюдения в течение многих лет бездействовала на компьютерах по всему миру, тайно включала микрофоны, делала скриншоты, копировала файлы, записывала нажатия клавиш, играла по Bluetooth и отправляла всю информацию неизвестным лицам.
Тест скорости онлайн оперативной памяти в облаке
Когда мы официально запустил наши новые серверы Performance Cloud На прошлой неделе мы пообещали предоставить целую неделю результатов сравнительного анализа, сравнивающих нашу производительность с известными провайдерами. Вот наш первый тест производительности оперативной памяти. Количество и пропускная способность оперативной памяти являются ключом к скорости и производительности Очевидно,
Прикрепите это к человеку: отключите Touch ID на вашем iPhone или iPad
Новые технологии иногда могут значительно опережать законы и сотрудников правоохранительных органов, но в конечном итоге правительство догоняет их. Так что это подтвердилось с Touch ID, одной из лучших функций Apple на iPhone и iPad. Недавно суд постановил, что осужденный преступник должен был разблокировать ее iPhone с ее отпечатком пальца
Облачные вычисления | Виртуализация приложений с помощью Parallels RAS
Обзор облачных вычислений Облачные вычисления - это инновационная методология, которая объединяет аппаратное обеспечение, сеть, хранилище и программное обеспечение для предоставления вычислительных ресурсов в качестве услуги через Интернет. Обладая способностью масштабировать ресурсы и автоматически предоставлять и отключать сервисы, облачные вычисления используют ресурсы для повышения эффективности бизнес-процедур. Облачные вычисления предлагают различные модели развертывания, такие
Обзор приложения Wire Messaging 2019 - стоит ли это того?
Вы обеспокоены тем, что кто-то прочитает ваши сообщения? Есть ли способ защитить ваши разговоры? Здесь приложение Wire Messaging вступает в игру. Благодаря своим возвышенным функциям, особенно в эпоху, когда обеспечение вашей конфиденциальности в Интернете очень сложно, такое приложение, как Wire, обеспечивает отличное облегчение для пользователей. В нашем обзоре Wire мы рассмотрим некоторые его существенные особенности, цены, то, как приложение конкурирует с другими альтернативами,
Сделайте ваш CSS динамичным с силой МЕНЬШЕ
... js / less.js" type = "text / javascript"> </ script> Затем создайте файл с расширением .less и свяжите его со своей страницей с кодом ниже: <link rel = "stylesheet / less" type = "text / css" href = "css / style.less"> Убедитесь, что вы связали свой файл LESS перед файлом Javascript. В противном случае он попытается обработать файлы .less перед их загрузкой. Если у вас есть эта настройка, вы можете вставить любой
Создание карт ума. Как нарисовать их, с программным обеспечением и примерами
Карты разума для навигации идей Представь, что ты в незнакомом городе. Вы хотите пойти в собор, но не знаете, как туда добраться. Чем ты занимаешься? Вы смотрите на карту, которая показывает вам путь, по которому нужно следовать, и сразу же вы чувствуете, что у вас есть город на ладони. Наш ум тоже может быть нанесен на карту, и мы можем следовать его путям. Карта ума - это эффективный инструмент для уточнения и анализа сложных концепций, поиска решений
Предварительный просмотр страницы / 2016 A / B Тесты
... тесты с предыдущими количественными и качественными результатами. Ховеркарты хорошо зарекомендовали себя в предыдущий тест в греческом и каталонском Википедии, пользователи сообщают о положительном взаимодействии с функцией. Мы хотели еще раз проверить эти результаты в более широком масштабе, узнав больше о поведении пользователя при чтении. Исходя из результатов этих тестов, мы можем
Вы обеспокоены тем, что кто-то прочитает ваши сообщения?
Есть ли способ защитить ваши разговоры?
Чем ты занимаешься?