Я никогда не был фанатом написания модульных тестов в проектах. Я всегда пропускал написание тестовых примеров, полагая, что это скучно и что у нас уже есть ручное тестирование и набор тестов на селен, написанный командой QA. Я был слишком занят, чтобы понять это.
Однако, когда я начал работать над новым проектом, созданным на NodeJs, и у меня оставалось несколько дней до его выпуска, я решил написать тестовые примеры. Мне потребовалось некоторое время, чтобы доработать точный технический стек для написания тестовых примеров.
После некоторого исследования я завершил работу над технологическим стеком ниже.
- Мокко
- Чай для утверждений
- Супертест для асинхронного тестирования API
- axios-mock-адаптер для имитации вызовов axios
- 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: Это моя первая статья среднего размера, пожалуйста, оставляйте отзывы в комментариях и благодарности в аплодисменты. :)