> Как тестировать REST API содержимое JSON ответа с вложенными объектами (JavaScript)
Уровень: senior · Роль: backend · Категория: Технические вопросы
Компании: LeanSoftwareProduction
Стек: JavaScript
> Пример ответа
Для тестирования JSON-ответов с вложенными объектами в REST API на JavaScript чаще всего используют библиотеки вроде supertest (для HTTP-запросов) и chai или jest (для ассертов). Основной подход - проверять структуру и типы данных, а не точное совпадение всего ответа, чтобы тесты были гибкими.
Пример с supertest и chai:
JAVASCRIPTconst 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):
JAVASCRIPTconst 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.
> Похожие задачи по backend
В чем отличия языков программирования Java, Python и JavaScript
В чем преимущества JSONB над JSON в базе данных?
Какие индексы использовать для JSON по атрибутам в PostgreSQL
Какие особенности и проблемы возникают при работе с JSON в PostgreSQL
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью