Функциональное тестирование — это тестирование ПО в целях проверки реализуемости функциональных требований, то есть способности ПО в определённых условиях решать задачи, нужные пользователям.
В отношении сайтов такое тестирование можно провести, делая HTTP-запросы к соответствующим обработчикам и проверяя их ответ. Чтобы это было возможно, требуется небольшая дисциплина кода. В случае Express она выражается в том, что определение приложения отделяется от его запуска.
// src/app.js
import Express from 'express';
const app = new Express();
app.get('/', (req, res) => res.send('hello'));
export default app;
// bin/app.js
#!/usr/bin/env node
import app from '../src/app.js';
app.listen(4000);
Такое разделение позволяет библиотекам для тестирования самостоятельно запускать приложение и останавливать его при выполнении запросов. Что, в свою очередь, позволяет легко этими тестами управлять. Вам не придётся следить за тем, чтобы поднять сервер или выключить, вы просто будете запускать тесты и проверять результат.
Supertest
Supertest — это библиотека, созданная исключительно с целью проводить функциональное тестирование HTTP-интерфейса.
// __tests__/app.test.js
import request from 'supertest';
import app from '../src/app.js';
test('request', async () => {
const res = await request(app).get('/');
if (res.error) {
throw res.error;
}
expect(res.status).toBe(200);
});
После выполнения запроса она возвращает response
, который содержит параметры ответа, а также объект error
, в случае если произошла ошибка. Все тесты этого курса написаны с помощью данной библиотеки. При этом важно отметить, что эта библиотека не позволяет проверить генерируемый HTML, поэтому возможны ситуации, при которых ваш HTTP-интерфейс работает, а формы на сайте сделаны неправильно, что означает невозможность использования сайта. На данном этапе в бой вступает приёмочное тестирование, которое не рассматривается в рамках данного курса.
Superagent
В основе библиотеки Supertest лежит другая библиотека - Superagent. Именно она позволяет формировать произвольные запросы к серверу.
import request from 'superagent';
const res = await request
.post('/api/pet')
.type('form')
.send({ name: 'Manny', species: 'cat' })
.set('X-API-Key', 'foobar')
.set('Accept', 'application/json');
Дополнительные материалы
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты