Так вот, вы заняли позицию младшего разработчика. Вы ожидаете, что с этого момента вы будете писать элегантный код и создавать потрясающие приложения весь день каждый день. Психея! Ты собираешься писать тесты весь день? Младший разработчик? Что я могу протестировать? Наверняка вы «Шутка»!

Jest - это восхитительная среда тестирования Javascript с упором на простоту. - https://jestjs.io/en/

По правде говоря, документация довольно тщательная и определенно поможет вам быстро приступить к работе. Первое, что вы замечаете при написании тестов с помощью Jest (и я также видел это в rspec и Capybara для Ruby), - это то, что в тестах используется синтаксис, похожий на «простой английский». Они называются «Матчеры».

Сопоставители-

Сопоставителям предшествует «Объект ожидания»:

В этом случае «expect (sum (1,2))» принимает функцию «sum» и два аргумента «1, 2» и использует сопоставитель «.toBe ()», который соответствует для «точного равенства ». Затем Jest «отслеживает все неудачные сопоставители, чтобы можно было распечатать для вас приятные сообщения об ошибках». - Документация Jest.

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

Вы также можете проверить противоположность сопоставления, добавив «.not» перед сопоставлением. В этом случае это будет выглядеть так: «.not.toBe (0)».

Правдивость-

Сопоставители истинности следующие:

  • toBeNull соответствует только null
  • toBeUndefined соответствует только undefined
  • toBeDefined является противоположностью toBeUndefined
  • toBeTruthy соответствует всему, что оператор if рассматривает как истину
  • toBeFalsy соответствует всему, что оператор if считает ложным.

Числа-

Большинство способов сравнения чисел также имеют эквиваленты сопоставления:

Например, «≥» можно выразить как «expect (value) .toBeGreaterThanOrEqual (3.5);»

для равенства с плавающей запятой используйте: «toBeCloseTo ()», чтобы вас не смущали досадные десятичные разряды.

Строки-

Строки можно сравнить с регулярными выражениями с помощью «.toMatch ()».

test ("в предположении есть задница", () = ›{ожидать (" предположить "). toMatch (/ ass /);});

Массивы и итерации-

Вот пример списка покупок:

const shoppingList = [«апельсины,», «яблоки», «бананы», «авокадо»,];

test ('в списке покупок есть авокадо', () = ›{expect (shoppingList) .toContain ('avocado'); expect (new Set (shoppingList)). toContain ('авокадо' );});

Исключения-

Чтобы проверить сообщение об ошибке, возвращаемое функцией, используйте «toThrow ()»

function compileKillerCode () {throw new Error («вы используете неправильный код убийцы»); } test («компиляция killerCode идет, как ожидалось», () = ›{expect (compileKillerCode) .toThrow (); expect (compileKillerCode) .toThrow (Error);

и многое другое ... В документации гораздо больше сопоставителей: https://jestjs.io/docs/en/expect

Напишем тест!

«Модульный тест» написан для тестирования отдельного фрагмента кода. «Интеграционный тест» проверяет интеграцию между программными модулями. Прежде чем они смогут работать, нужно пройтись, поэтому я собираюсь написать тест для простой выборки, которую я использовал в одном из своих приложений.

Итак, для нашего теста package.json должен выглядеть так:

Мой тестовый код выглядит так:

Обычно мы импортируем тестовую функцию из другого js файла, написанного с нашей функцией в нем. Однако выборка является асинхронной, поэтому нам нужно обрабатывать ее немного по-другому. Документация находится здесь: https://jest-bot.github.io/jest/docs/asynchronous.html

Кроме того, поскольку Jest - это фреймворк узлов, который не поддерживает извлечение из коробки, поэтому нам нужно импортировать модуль node-fetch. Https://www.npmjs.com/package/node-fetch

Когда я запускаю «npm run test», мой тест проходит успешно! Ура! Мой первый тест Jest прошел «в дикой природе».

Так что насчет всех этих «красных чернил» ?? Похоже, выбор асинхронной функции был не самым простым вариантом использования для начала. Тем не менее, я определенно кое-что узнал о тестировании с помощью Jest и с радостью вернусь к тестированию асинхронных функций позже. Если у вас есть какие-либо полезные ссылки или материалы, относящиеся к этой теме, пожалуйста, поделитесь! Удачного кодирования!