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

Однако, когда я начал работать над новым проектом, созданным на NodeJs, и у меня оставалось несколько дней до его выпуска, я решил написать тестовые примеры. Мне потребовалось некоторое время, чтобы доработать точный технический стек для написания тестовых примеров.

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

  1. Мокко
  2. Чай для утверждений
  3. Супертест для асинхронного тестирования API
  4. axios-mock-адаптер для имитации вызовов axios
  5. NYC для покрытия кода

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

Пример тестового случая ниже:

import axios from 'axios';
const request = require('supertest');
const MockAdapter = require('axios-mock-adapter');
const config = require('config');
const app = require('./../app');
describe('User Details API', function() {
   it('Success', (done) => {
   let mockAdapter = new MockAdapter(axios);
   mockAdapter.onPost(       `${config.get('server.auth')}users/identify`).reply(200, {
   "success": true,
   "data": {
     "id": "5cf6094182979974c6fc1f3f",
     "type": "user",
     "attributes": {
       "email": "[email protected]"
     }
  }
}, {
"set-cookie": ['cvxhavxjhavcjhavchjvacvhjk']
});
// When successful, response is 200
request(app)
   .post('/user')
   .set('Authorization', authToken)
   .send({
      email: '[email protected]',
   })
   .expect(200, {"success": true,
     "data": {
     "id": "5cf6094182979974c6fc1f3f",
     "type": "user",
     "attributes": {
        "email": "[email protected]",
  }
}}, done)
});

Интеграция инструмента покрытия

Установите nyc как зависимость разработчика

yarn add nyc -D

Скрипт для инструмента покрытия и теста

"scripts": {
    "only-test": "mocha **/*.test.js --require @babel/register ",
    "test": "nyc --reporter=text npm run only-test"
}

Беги нью-йорк

yarn run test

Предварительная фиксация

Добавьте это в свой pre-commit или pre-push hook, чтобы отловить неудачные тестовые примеры на самом dev перед каждым коммитом / push.

Установить хаски

yarn add husky -D

Скрипт в package.json

"husky": {
   "hooks": {
      "pre-commit": "yarn run test"
   }
}

P.S: Это моя первая статья среднего размера, пожалуйста, оставляйте отзывы в комментариях и благодарности в аплодисменты. :)