Автор оригинала: Olatunde Michael Garuba.
Что такое тестирование?
Тестирование – это процесс оценки системы или его компонентов (ов) с намерением найти, удовлетворяет ли это указанным требованиям или нет.
Тестирование выполняет систему, чтобы определить любые пробелы, ошибки или отсутствующие требования, противоречащие фактическим требованиям.
В этом руководстве даст вам базовое понимание по тестированию программного обеспечения, его типов и других связанных с терминологиями.
Типы тестирования
Существует несколько типов теста на разработку программного обеспечения, такого как (тестирование единиц, тестирование интеграции, функциональное тестирование, тестирование системы, тестирование напряжений, тестирование производительности, тестирование на удобство использования, тестирование на приемлемость). Однако я буду говорить о тестировании интеграции в этой статье.
Тестирование интеграции логически является расширением тестирования подразделения. Когда два или более единиц объединяются, они приводят к тому, что называется интерфейсом. Эти интерфейсы дополнительно объединяются для формирования компонентов. Тестирование интеграции определяет проблемы, которые возникают на уровне интерфейса. Этот метод уменьшает количество потенциальных проблем.
Тестирование интеграции помогает обеспечить, чтобы функциональные, производительность и надежность между узлами, которые интегрированы, работают должным образом.
Почему я должен делать тестирование интеграции?
- Тестирование интеграции помогает ловить ошибки на более ранней стадии в цикле разработки программного обеспечения.
- Тестирование интеграции легко интегрировать с ежедневными сборками
- Тестирование интеграции легко проверить в местной среде
- Тесты проходят быстрее по сравнению с концом для окончания тестов.
- Тестирование интеграции более надежно и используется при выделении сбоев.
- Интеграционные тесты используются обнаружение проблем уровня системы.
Кто должен проверить?
Помимо того, что тестирование – это хороший критерий для быстрого и хорошего разработки программного обеспечения, который помогает вам найти разрывы кода с небольшими модификациями/изменениями. Я разочарован, чтобы перейти к почтуле каждый раз, чтобы проверить мои API. Если вы похожи на меня, и хотите иметь почти все, что все сделано в Go, или вы надоели для быстрого и хорошего программного приложения, Вам нужно принять программное обеспечение для разработки вождения программного обеспечения.
Предварительное условие и инструменты
Node.js Запуск конечных точек – это предварительные пункты, а вот некоторые инструменты, которые вы можете использовать:
Супертест:
Supertest предлагает очень простой способ проверить API с несколькими линиями команд и хорошо документированным доктором.
Мокка:
Mocha – это система тестирования JavaScript, которая работает в браузере и на Node.js. Одной из основных особенностей MOCHA является его способность сделать асинхронное тестирование простым и веселым, что позволяет для гибкой и точной отчетности.
Чай:
Чай сияет на свободе выбора интерфейса, который мы предпочитаем: «Следует«, «ожидать», «Assert» все они доступны. Я лично использовать должен, но вы можете бесплатно проверить API и переключиться на двух других. Наконец, Chai HTTP Addon позволяет библиотеке Chai легко использовать утверждения по HTTP-запросам, которые соответствуют нашим потребностям.
Примечание: Chai имеет несколько интерфейсов, которые позволяют разработчику выбрать самое удобное. Способные стили BDD цепи обеспечивают выразительный язык и читаемый стиль, в то время как стиль TDD Assert предоставляет более классическое ощущение. Наш тестовый случай будет написать тест интеграции для простых apis сервера nodejs из одного из моих предыдущих учебников Nodejs через десять минут Отказ
Теперь, если у вас уже есть приложение Nodejs, вы можете перейти на шаг 3. Однако вам необходимо убедиться, что ваш модуль Express Server экспортируется. Используйте шаги как применимые.
Несколько изменений будут сделаны в приложение Для нашего тестового случая:
Шаг 1: Сделать сервер.js экспортируемый.
Шаг 2: Добавить конфигурации окружающей среды для различных сред.
Шаг 3: Напишите базовые тесты интеграции для API.
Шаг 1: Сделайте сервер.js экспортируемым.
Добавить модуль. Экспорты;
на сервер.js.
Module.exports – это объект, созданный модульной системой – это помогает предоставить несколько глобальных переменных. Что бы вы ни присваиваете Module.exports или экспорту, он будет выставлен в виде модуля.
Шаг 2: Добавить конфигурации окружающей среды для различных сред.
Создайте папку в корне приложения под названием config mkdir config
Отказ Внутри этой папки мы создадим 4 файла под названием Production.js
, test.js
, Development.js
и index.js
Отказ
cd config
а потом бежать
touch production.js test.js index.js development.js
Основной целью здесь является обеспечение того, чтобы наши конфигурации не подделаны, такие как база данных.
В Development.js
Мы экспортируем нашу конфигурацию, чтобы она была доступна в другом месте, когда это необходимо.
Вставьте следующее в нее и сохраните.
'use strict'; module.exports = { env: 'development', db: 'mongodb://localhost/Tododb', port: process.env.PORT || 4000, };
Это повторяется для теста и производства.
В Index.js мы делаем доступную конфигурацию среды в приложение без какой-либо логики
Шаг 3: Написать базовые тесты интеграции для API
Прежде чем мы сможем написать наш базовый тест интеграции для маршрутов TodoList APIS, как показано на диаграмме ниже, используя Supertest, Mocha и Chai.
Нам нужно установить требуемые зависимости, работающие:
npm install supertest mocha chai --save-dev
- Перейдите в корню своей папки и создайте папку, где все тест будет и запущен:
mkdir ../test && cd $_
- Создайте тестовый файл
Touch ToDos.test.js.
3. В todos.test.js
Файл, нам нужно сделать доступные файлы, такие как Server, Chai (для BDD) и Supertest by:
'use strict'; var app = require('../server'), chai = require('chai'), request = require('supertest');
Сохраните API Chai (ожидайте), что мы будем использовать, чтобы принудиться сухим, а затем писать тесты.
Как правило, тесты сгруппированы/вложены в идентификатор/сюита под названием Опишите
В то время как тестовые случаи фактически тестируются в Идентификатор/Люкс
Отказ Это, как правило, следит за дизайном для BDD. Вы можете прочитать больше об этом здесь
Следовательно, в нашем случае тодолист API, у нас будет что-то подобное:
- Запустите следующий код:
describe('Todos list API Integration Tests', function() { });
Как вы знаете, у нас есть 5 разных конечных точек, но начну с «Get» на «/заданиях».
Для этого мы пишем еще один тестовый костюм, описанный в первом номере. Это будет группировать все тест, который связан с GET/CADESS
( Примечание: как общий набор, каждая другая группа будет вложена в этом.)
describe('Todos list API Integration Tests', function() { describe('#GET / tasks', function() { it('should get all tasks', function(done) { request(app) .get('/tasks') .end(function(err, res) { expect(res.statusCode).to.equal(200); expect(res.body).to.be.an('array'); expect(res.body).to.be.empty; done(); }); }); }); });
Здесь мы говорим, сделайте запрос на /Задачи
Маршрут в нашем приложении. Ожидается, что ожидается, что код состояния ответа должен быть 200 (то есть в порядке). Это будет верно, если у нас есть рабочий маршрут /Задачи
с запросом на получение.
Кроме того, мы говорим, что тип тела ответа должен быть массивом и должен быть пустым. Это также верно, потому что мы не создали какую-либо задачу в тестовой базе данных.
После этого давайте обновим наше Package.json
файл, чтобы включить команду теста в объекте скрипта, добавив
"test": "NODE_ENV=test mocha — timeout 10000"
На терминале запустите NPM запустить тест
:
3. Создайте тест на задачу, чтобы создать тестовый набор.
Также как то, что мы сделали в первом тесте, мы объявим группу Suite, а затем тестовый случай с соответствующим описанием и именем теста, опубликовать на маршруте и отправлять данные, которые мы хотим создавать.
Тем не менее, мы создали глобальную переменную для хранения созданной задачи/для создания
'use strict'; var app = require('../server'), chai = require('chai'), request = require('supertest'); var expect = chai.expect; describe('API Tests', function() { var task = { name: 'integration test' }; describe('# Get all tasks', function() { it('should get all tasks', function(done) { request(app) .get('/tasks') .end(function(err, res) { expect(res.statusCode).to.equal(200); expect(res.body).to.be.an('array'); expect(res.body).to.be.empty; done(); }); }); }); describe('## Create task ', function() { it('should create a task', function(done) { request(app) .post('/tasks') .send(task) .end(function(err, res) { expect(res.statusCode).to.equal(200); expect(res.body.name).to.equal('integration test'); task = res.body; done(); }); }); }); });
Как видите, на бегах NPM запустить тест
Это сейчас проходит:
Однако, если мы снова запустим тест, первый будет потерпеть неудачу.
Я оставлю вас, чтобы понять это, прежде чем убрать все это.
- Создайте тестовый люкс, чтобы получить одну задачу
describe('Get a task by id', function() { it('should get a task', function(done) { request(app) .get('/tasks/' + task._id) .end(function(err, res) { expect(res.statusCode).to.equal(200); expect(res.body.name).to.equal('integration test'); done(); }); }); });
Почти так же, как то, как мы сделали это для всех других маршрутов.
Вы можете найти полный код на Github – Отливность в супертесте, пожалуйста.
Некоторые глазурь на торте
Исходовав это далеко, это было бы потрясающе, если бы мы могли видеть, как наши тесты делают в отношении нашего приложения с точки зрения охвата теста
Давайте добавим Code Castage в приложение!
Стамбул , это инструмент покрытия кода JavaScript, который вычисляет оператор, строку, функцию и покрытие ветви с модульными загрузчиками крюками для прозрачно добавления покрытия при запуске тестов. Он поддерживает все случаи использования охвата JS, включая модульные тесты, функциональные тесты на стороне сервера и тесты браузера. Даже лучше? Он был построен для масштаба.
К счастью, нам не нужно ничего делать, чтобы установить Стамбул. Мы можем просто сделать это:
npm install istanbul --save-dev
а затем изменить наш Package.json
файл.
В Package.json
Файл, добавьте тест с охватом в объект скрипта
"test-coverage": "NODE_ENV=test istanbul cover _mocha —- -R spec"
Затем бегите
npm run test-coverage
Как видите, с этими немногими изменениями в нашем первоначальном приложении жизнь становится легче и развитие сделано быстро.