Разработка через тестирование и модульное тестирование

Тестирование - один из важнейших аспектов производства программного обеспечения. Тесты информируют разработчиков о четком поведении определенных частей приложения.

Многие компании используют методологию программирования, известную как разработка через тестирование (TDD), для управления производством. TDD диктует, что сначала должны быть созданы автоматизированные модульные тесты, чтобы руководить производством программного обеспечения до того, как будет написан какой-либо код.

Но что такое модульные тесты?

Модульный тест - это способ тестирования самого маленького фрагмента кода (также известного как модуль или компонент), который может быть изолирован от программного обеспечения. Единицей может быть отдельная функция, метод, процедура, модуль или объект.

Понимание того, как будет тестироваться код, информирует разработчиков о том, как лучше всего составлять код и разбивать его на модули.

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

В TDD новый код следует писать или изменять только в том случае, если тест не проходит; тестирование всегда способствует развитию.

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

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

Он поставляется с предустановленным приложением create-creat-app и изначально был разработан специально для тестирования приложений React.

С тех пор он стал одной из самых популярных сред тестирования JavaScript для клиентских и серверных приложений и, возможно, самой простой в использовании. По состоянию на апрель 2021 года у Jest более 11 миллионов загрузок в неделю.

Создание нашего первого теста

В демонстрационных целях мы не будем использовать create-react-app, а вместо этого создадим очень простое приложение на Node.js. Итак, из командной строки создадим новый каталог, инициализируем npm, создадим файл и установим Jest:

$ mkdir test
$ cd test
$ npm init -y
$ touch script.js
$ npm install --save-dev jest
$ code . (open the new dir in whatever code editor you use)

Теперь откройте package.json и укажите «test» для запуска Jest, заменив текст на «jest»:

Теперь мы можем запустить Jest, просто введя «npm test» в командную строку. Давайте откроем script.js и создадим простую функцию, которая получает сумму двух чисел. мы будем использовать модули CommonJS для экспорта:

Давайте создадим новый файл с тем же именем, что и файл, который мы будем тестировать, но добавим «.test.js» для проведения нашего теста.

Каждый тестовый файл, использующий Jest, должен иметь в конце имени «.test.js», чтобы его можно было определить как тестовый пример. Ниже приведен простой тест, созданный с помощью синтаксиса Jest, чтобы проверить, дает ли 2 + 3 результат 5 для нашей функции суммы:

Обратите внимание, что это читается почти как предложение, как мило!

Функция «test» принимает два аргумента; первый параметр - это строка, в которой мы определяем, что тест будет проверять (это только для чтения людьми, это не имеет никакого отношения к работе теста).

Второй параметр - это функция, содержащая тест, который мы будем запускать. Внутри этой функции у нас есть функция «ожидать», которая принимает указанную функцию для тестирования («сумму») с аргументами по нашему выбору.

Затем результат сравнивается с нашим ожидаемым результатом с использованием сопоставителей, таких как .toBe (который проверяет строгое равенство ===). Смотрите полный список совпадений здесь.

А теперь поехали:

$ npm test

Терминал должен вывести что-то подобное:

Woohoo! Наш первый прохождение модульного теста. Давайте сделаем еще один, чтобы мы могли увидеть, как управлять тестированием нескольких единиц в одном файле, и увидеть, как использовать другой сопоставитель. Давайте создадим новую функцию в файле script.js с именем cloneObj, которая будет брать объект и возвращать его копию с помощью оператора распространения ES6. Затем мы экспортируем обе функции:

Теперь давайте напишем тест в файле script.test.js:

Запустите $ npm test и посмотрите, что произойдет. Тест, проверяющий нашу функцию cloneObj, не работает:

Если вы посмотрите Шпаргалку Jest, то увидите, что сопоставитель .toBe проверяет строгое равенство ===. Однако два объекта никогда не являются одним и тем же объектом.

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

Есть способ проверить, содержит ли содержимое объекта одинаковые свойства и значения, известный как глубокое равенство или глубокое равенство. Если вы посмотрите на сообщение, Jest рекомендует использовать toStrictEqual для проверки глубокого равенства, что действительно слегка сбивает с толку.

Лучшее решение: у Jest есть сопоставитель «.toEqual», который позволяет нам более четко выражать наши намерения. Итак, давайте поменяем местами сопоставители, и оба наши тесты должны пройти:

Стоит отметить, что вы можете написать несколько тестов в одном файле для каждого тестируемого модуля. И не забудьте добавить в закладки Шпаргалку Jest!

Наблюдение за тестами

Если вы хотите, чтобы узел следил за изменениями в ваших файлах .js, чтобы вам не приходилось вводить $ npm test снова и снова, просто добавьте следующее в тестовый скрипт в package.json, запустите $ npm test, и тесты будут запускаться автоматически в любое время, когда вы вносить изменения в файл .js.

--watch *.js 

Как всегда, спасибо за чтение. Не стесняйтесь связаться со мной в LinkedIn!

Больше контента на plainenglish.io