Руководство для начинающих по платформе тестирования Jest с алгоритмами

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

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

Как мы тестируем наш код?

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

function sum(a,b){
   return a + b
}
sum(1,3); // returns 4

Для большинства разработчиков это не будет считаться тестом. Но всем, кто посещал уроки математики, известно, что 1 + 3 = 4, и эта функция суммирования вернула именно это, подтверждая, что в данном случае функция работала так, как мы ожидали.

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

Структуры тестирования

Как вы уже знаете, существует множество различных фреймворков и библиотек (часто загружаемых в виде пакетов или гемов и т. д.), которые мы можем использовать в наших приложениях, чтобы упростить жизнь. Для тестирования у нас есть много вариантов, включая MochaJs, Jasmine и, самое главное, Jest.

Что такое шутка?

Согласно их веб-сайту, Jest — это восхитительная платформа для тестирования JavaScript с упором на простоту. Он работает с проектами, использующими: «Babel, TypeScript, Node, React, Angular, Vue и многое другое!»

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

Для начала установите jest с помощью npm (или yarn, если хотите)

npm install --save-dev jest

Это так просто, но давайте поговорим о том, как это полезно для нас. Мы собираемся притвориться, что решаем алгоритм, который хочет, чтобы мы проверили формат почтового индекса, возвращая true, если он действителен, и false, если нет. («85014» должно возвращать истину, «1000» — нет и т. д.)

Использование Jest для тестирования ваших алгоритмов

Один из самых простых способов использования Jest — это тестирование наших алгоритмических решений, поскольку мы знаем, что будем тестировать его МНОГО. Вместо того, чтобы записывать вызовы функций, пытайтесь каждый раз их вычислять, Jest сделает это за нас.

Итак, после запуска команды выше, давайте создадим несколько файлов. Нам нужен postal.js для записи нашего решения и postal.test.js (да, эти соглашения об именах важны) для запуска наших тестов.

In postal.js

function valid_postal_code(string){
   <solution here>
}
module.exports = valid_postal_code

Здесь мы будем решать алгоритм. Внизу мы экспортируем функцию для использования в другом месте… (подсказка подсказка postal.test.js)

In postal.test.js

const validPostal = require('./postal') // or your path to postal.js

//tests go here

Здесь мы запрашиваем функцию valid_postal_code из postal.js и сохраняем ее в переменной с именем по нашему выбору (validPostal), чтобы мы могли вызвать ее позже в наших тестах. Обычно лучше называть эту переменную так же, как и вашу функцию, но для ясности в том, что нужно назвать, что и какие возможности вам предоставляются, я этого не делал.

Большой! Мы все настроены. Теперь о тестах. Вот пример теста в Jest -

test('adds 1 + 2 to equal 3', () => {
  expect(sum(1, 2)).toBe(3);
});

Давайте разберем это. У нас есть тестовая функция, которая принимает строку (описание нашего теста), и анонимная функция, которая может выглядеть незнакомой, но делает именно так, как читается. Ожидайте, что сумма 1 и 2 будет равна 3. Просто, верно?

Чтобы было понятнее, ожидаемая функция принимает вашу функцию из имени переменной, которому вы ее присвоили, и получает значение из ее возврата. ожидание (сумма (1,2)) превращается в ожидание (3) после возврата суммы (1,2). Далее у нас есть то, что называется сопоставителем.

Сопоставители шуток

В приведенном выше примере у нас есть .toBe в качестве нашего сопоставителя, который, по сути, приравнивает примитивные типы данных. (3 равно 3) Если мы хотим приравнять сложные типы данных (например, массивы и объекты), мы используем .toEqual. (помните, что сложные типы данных не совпадают)

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

Вот несколько сопоставителей в действии -

//NUMBER toBeLessThanOrEqual and toBeGreaterThan
test('two plus two', () => {
  const value = 2 + 2;
  expect(value).toBeLessThanOrEqual(4.5);
  expect(value).toBeGreaterThan(3);
});

//STRING toMatch
test('there is no I in team', () => {
  expect('team').not.toMatch(/I/);
});

//ARRAY toContain
const shoppingList = [
  'diapers',
  'kleenex',
  'trash bags',
  'paper towels',
  'milk',
];
test('the shopping list has milk on it', () => {
  expect(shoppingList).toContain('milk');
});

Тесты проверки почтового индекса!

Итак, имея все это в виду, у нас есть все инструменты, необходимые для проведения некоторых тестов. В вашем тестовом файле или postal.test.js давайте попробуем это —

test('accepts 85013', () => {
   expect(validPostal('85013')).toBe(true);
});
test('accepts 00000', () => {
   expect(validPostal('00000')).toBe(true);
});
test('rejects 0000', () => {
   expect(validPostal('0000')).toBe(false);
});
test('rejects abc', () => {
   expect(validPostal('abc')).toBe(false);
});

Отлично, мы настроили наши тесты. Теперь мы можем запустить npm test!

На данный момент у вас должно быть 4 неудачных теста! Ура! Мы никогда не были так счастливы видеть неудачные тесты. Теперь, если бы этот пост был о качестве ваших тестов, я уверен, что никто не стал бы читать дальше, поэтому я остановлюсь здесь. Напиши еще тесты, реши этот алгоритм и назови меня Купидоном, потому что я думаю, что ты просто влюбился в Джеста.

TL;DR



^^^ отличные документы!