> Как тестировать REST API содержимое JSON ответа с вложенными объектами (JavaScript)

Уровень: senior · Роль: backend · Категория: Технические вопросы

Компании: LeanSoftwareProduction

Стек: JavaScript

> Пример ответа

Для тестирования JSON-ответов с вложенными объектами в REST API на JavaScript чаще всего используют библиотеки вроде supertest (для HTTP-запросов) и chai или jest (для ассертов). Основной подход - проверять структуру и типы данных, а не точное совпадение всего ответа, чтобы тесты были гибкими.

Пример с supertest и chai:

JAVASCRIPT
const request = require('supertest');
const { expect } = require('chai');
describe('GET /api/users/:id', () => {
it('должен вернуть пользователя с вложенным объектом address', async () => {
const res = await request(app)
.get('/api/users/1')
.expect(200);
// Проверка верхнего уровня
expect(res.body).to.have.property('id').that.is.a('number');
expect(res.body).to.have.property('name').that.is.a('string');
// Проверка вложенного объекта
expect(res.body).to.have.property('address').that.is.an('object');
expect(res.body.address).to.have.property('city').that.is.a('string');
expect(res.body.address).to.have.property('zip').that.is.a('string');
// Проверка массива внутри объекта (если есть)
if (res.body.orders) {
expect(res.body.orders).to.be.an('array');
res.body.orders.forEach(order => {
expect(order).to.have.property('id');
expect(order).to.have.property('total').that.is.a('number');
});
}
});
});

Для глубоко вложенных структур удобно использовать chai-json-schema или ajv (валидация по JSON Schema):

JAVASCRIPT
const schema = {
type: 'object',
required: ['id', 'name', 'address'],
properties: {
id: { type: 'number' },
name: { type: 'string' },
address: {
type: 'object',
required: ['city', 'zip'],
properties: {
city: { type: 'string' },
zip: { type: 'string' }
}
}
}
};
expect(res.body).to.be.jsonSchema(schema);

Ключевые моменты:

  • Избегайте жёстких сравнений (toEqual), используйте проверки типов и наличия полей.

  • Для вложенных объектов проверяйте каждый уровень отдельно или через схему.

  • Если API возвращает динамические данные (например, даты), проверяйте их формат регулярными выражениями или библиотеками вроде moment.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью