Ответ
Интеграционное тестирование проверяет взаимодействие нескольких модулей или систем (например, API, базы данных, внешних сервисов) как единого целого. Для веб-приложений это часто означает тестирование сквозных сценариев через HTTP-запросы.
Пример интеграционного теста для REST API (Node.js, Jest, Supertest):
const request = require('supertest');
const app = require('../app'); // Express приложение
describe('User API Integration Tests', () => {
test('GET /api/users возвращает список пользователей', async () => {
const response = await request(app)
.get('/api/users')
.expect('Content-Type', /json/)
.expect(200);
expect(Array.isArray(response.body)).toBe(true);
expect(response.body[0]).toHaveProperty('id');
expect(response.body[0]).toHaveProperty('email');
});
test('POST /api/users создает нового пользователя', async () => {
const newUser = { email: 'test@example.com', name: 'Test User' };
const response = await request(app)
.post('/api/users')
.send(newUser)
.expect(201);
expect(response.body).toMatchObject({
id: expect.any(Number),
email: newUser.email,
name: newUser.name
});
// Проверка сохранения в БД (опционально)
const dbUser = await UserModel.findById(response.body.id);
expect(dbUser).not.toBeNull();
});
});
Ключевые аспекты такого теста:
- Интеграция компонентов: Проверяет связку маршрутизатора (Express), бизнес-логики и слоя данных (БД).
- Реальные HTTP-запросы: Использует библиотеку (Supertest) для эмуляции клиента.
- Зависимости: Требует поднятого тестового окружения (база данных, возможно, моки внешних сервисов).
- Цель: Обнаружить дефекты на стыке модулей, которые unit-тесты не выявят.