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

Эта статья будет короткой и приятной #candy

Конечно, вы можете использовать отладчик, встроенный в некоторые IDE, такие как IntelliJ Webstorm, или отлаживать API узла через отладчик Chrome. Но это означает, что вам нужно попасть в конечную точку API и, возможно, пройти через несколько файлов, чтобы получить доступ к функциям, которые вы действительно хотите протестировать.

Так вы можете этого избежать.

В этом примере мы будем использовать простой API-интерфейс Node.js, написанный в экспресс-режиме, с одним маршрутом. Вы можете найти репозиторий на моей странице Github.
Этот API очень прост, и для целей этой статьи я создал API с помощью экспресс-генератора с помощью команды:

express --view=pug myapp

Чтобы запустить сервер, внутри корневой папки проекта выполните команды:

npm install 
npm start

И у вас есть сервер, работающий на порту 3000.

Я добавил папку контроллеров и файл index-controller.js, который просто экспортирует простую функцию, суммирующую два числа:

module.exports = { 
sumNumbers: (first, second) => parseInt(first, 10) +       parseInt(second, 10) 
}

Функция sumNumbers вызывается, когда вы вызываете индексный маршрут API и передаете параметры запроса.

Когда вы вызываете localhost 3000 и передаете правильные параметры следующим образом:

http://localhost:3000/?firstNumber=30&secondNumber=40

Будет вызван индексный маршрут, который вызывает функцию sumNumbers:

var express = require('express'); 
var { sumNumbers } = require('../controllers/index-controller'); 
var router = express.Router(); 
/* GET index page. */ 
router.get('/', function(req, res, next) { 
  res.status(200).json({ 
    sum: sumNumbers(req.query.firstNumber, req.query.secondNumber)
  }) 
}); 
module.exports = router;

Что должно вернуться:

{"sum":70}

Итак, наш API готов.
Теперь начинается самое интересное!

Так что, если вы хотите протестировать только функцию sumNumbers без фактической необходимости запуска сервера, определения маршрута и установки правильных параметров?
Если бы это был более сложный API, вам нужно было бы добавить заголовки, такие как авторизация, или, если бы это был запрос POST, вам нужно было бы нацелить его через почтальона, и все, что вам нужно сделать, это посмотреть, возвращает ли sumNumbers правильный результат.

Оболочка узла спешит на помощь!

Чтобы запустить оболочку узла В корневой папке откройте терминал и введите node:

Теперь вы сможете выполнять код javascript в консоли следующим образом:

Но еще интереснее то, что, поскольку js-модули — это просто js-файлы, вы можете запросить их и протестировать любую экспортированную функцию.
Итак, давайте потребуем функцию sumNumbers и попробуем ее:

Теперь мы можем протестировать модуль javascript и посмотреть, как он работает, без необходимости проверять остальную часть API или даже запускать сервер.
Отлично!

Примечание. Если ваши модули импортируются с абсолютным путем, в вашем API, например, «app/controllers/index-controller», вам необходимо разрешить корневой путь проекта, чтобы вы могли импортировать правильные файлы.

Просто потребуйте модуль npm rootpaht перед всем остальным, и он разрешит пути

требовать('корневой путь')()

Как я уже говорил, это чрезмерное упрощение.
Представьте, что файл sumNumbers импортирует другой модуль js, и этот модуль js зависит от базы данных или требует модуля npm, такого как moment.js. Вы сможете протестировать его без необходимости проходить через весь API, чтобы убедиться, что этот единственный модуль работает так, как вы ожидаете.

Если вам понравилась статья, прокомментируйте ее и подпишитесь!
И да, следите за мной в Твиттере и связывайтесь со мной в LinkedIn!

Надеюсь, вам понравилось так же, как мне понравилось писать.

:)

Первоначально опубликовано на сайте urosnikolic.com 26 сентября 2018 г.