Пошаговое руководство по использованию Jest для тестирования в приложениях Node.js.

Подобно тому, как моя внешняя разработка подтолкнула мою внутреннюю разработку к использованию JavaScript (Node.js), теперь это заставляет меня задуматься о Jest для большей части моего внутреннего тестирования.

Раньше мое решение для внутреннего тестирования Node.js включало фреймворк Mocha, Chai для утверждений, Sinon для издевательства и Instabul для освещения. В то же время Jest с его сильной поддержкой React стал моим решением для внешнего тестирования (предоставляет фреймворк, решение для утверждения, имитации и покрытия).

Тогда возникает очевидный вопрос; Как насчет Jest на сервере? .

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

Все примеры из этой серии доступны для скачивания. Это приложения Node.js (версия ≥ 8.9.3).

Настройка

Создайте новый проект Node.js и установите eslint-config-airbnb-base, и его одноранговые зависимости; в документации, пакет как зависимости разработки.

примечание: я использую ESLint и особенно строгую конфигурацию Airbnb, хотя это и не требуется для тестирования; сейчас трудно писать JavaScript без него. Также особенно полезно наличие поддержки ESlint в вашем редакторе, например, Atom.

Установите пакеты jest и eslint-plugin-jest в качестве зависимостей разработки.

Настройте ESLint с помощью .eslintrc.js:

start / .eslintrc.js

module.exports = {
  extends: [
    'airbnb-base',
    'plugin:jest/recommended',
  ],
  plugins: [
    'import',
    'jest',
  ],
  env: {
    node: true,
    'jest/globals': true,
  },
};

Чтобы упростить запуск ESLint и Jest, мы обновляем package.json:

start / package.json

"main": "index.js",
  "scripts": {
    "lint": "eslint src/**",
    "test": "jest src",
    "coverage": "jest --collectCoverageFrom=src/**.js --coverage src"
  },
  "author": "",

Начало работы

Теперь мы пишем наше первое приложение в папке src.

start / src / sum.js

module.exports = (a, b) => a + b;

start / src / index.js

/* eslint-disable no-console */
const sum = require('./sum');
console.log(sum(1, 2).toString());

На этом этапе мы можем запустить eslint, чтобы убедиться, что наш код передает его.

npm run lint

Теперь мы можем написать тест для sum.js.

start / src / sum.test.js

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

и запустите тест с помощью:

npm run test

примечание: npm test - это особый случай скрипта.

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

npm run coverage

В результате, как и ожидалось, у нас 100% покрытие для sum.js, но 0% покрытие для index.js (мы не писали для него тест).

Дальнейшие действия

Мы продолжаем наше пошаговое руководство в Еще раз о тестировании Node.js: Часть 2, представляя более реальное приложение (приложение Express).