Quasar предоставляет гибкие возможности для работы с внешними API, включая инструменты для мокирования запросов. Mocking API запросов позволяет эмулировать ответы сервера без необходимости подключения к реальной backend-инфраструктуре, что особенно полезно на этапе разработки и тестирования интерфейсов.
Quasar по умолчанию не навязывает конкретную библиотеку для
HTTP-запросов, но чаще всего применяется axios. С помощью
интерсепторов можно перехватывать запросы и возвращать заранее
определённые данные:
import axios from 'axios';
const api = axios.create({
baseURL: 'https://example.com/api'
});
api.interceptors.request.use(config => {
if (config.url === '/users' && config.method === 'get') {
return Promise.resolve({
data: [
{ id: 1, name: 'Иван' },
{ id: 2, name: 'Мария' }
]
});
}
return config;
});
Ключевой момент: этот подход позволяет изолированно мокировать отдельные эндпоинты без изменения логики приложения.
msw (Mock Service
Worker)msw работает на уровне Service Worker, что делает
мокирование полностью прозрачным для приложения и позволяет эмулировать
полноценное поведение REST или GraphQL API. Настройка в Quasar
осуществляется следующим образом:
// src/mocks/handlers.js
import { rest } from 'msw';
export const handlers = [
rest.get('/api/products', (req, res, ctx) => {
return res(
ctx.status(200),
ctx.json([
{ id: 1, title: 'Ноутбук', price: 50000 },
{ id: 2, title: 'Смартфон', price: 30000 }
])
);
})
];
// src/mocks/browser.js
import { setupWorker } from 'msw';
import { handlers } from './handlers';
export const worker = setupWorker(...handlers);
// main.js
import { worker } from './mocks/browser';
if (process.env.MODE === 'development') {
worker.start();
}
Преимущества MSW:
При создании проекта Quasar важно правильно организовать структуру моков. Оптимальная практика:
src/
├─ api/
│ ├─ axios.js
│ └─ index.js
├─ mocks/
│ ├─ handlers.js
│ └─ browser.js
└─ boot/
└─ mock-api.js
Файл boot/mock-api.js регистрирует сервис моков перед
запуском приложения:
import { boot } from 'quasar/wrappers';
import { worker } from 'src/mocks/browser';
export default boot(async () => {
if (process.env.MODE === 'development') {
await worker.start();
}
});
Это гарантирует, что моки будут активны только в development режиме и не повлияют на production сборку.
Для реалистичного тестирования интерфейсов необходимо эмулировать сетевые задержки и ошибки. MSW позволяет задавать задержку и статус ответа:
rest.get('/api/orders', (req, res, ctx) => {
const simulateError = req.url.searchParams.get('error');
if (simulateError === 'true') {
return res(
ctx.status(500),
ctx.json({ message: 'Internal Server Error' }),
ctx.delay(800) // задержка в миллисекундах
);
}
return res(
ctx.status(200),
ctx.json([{ id: 1, total: 1200 }]),
ctx.delay(500)
);
});
Моки легко интегрируются в состояние приложения. Пример использования с Composition API:
import { ref, onMounted } from 'vue';
import axios from 'src/api/axios';
export function useUsers() {
const users = ref([]);
const loading = ref(false);
const error = ref(null);
const fetchUsers = async () => {
loading.value = true;
try {
const response = await axios.get('/users');
users.value = response.data;
} catch (e) {
error.value = e;
} finally {
loading.value = false;
}
};
onMounted(fetchUsers);
return { users, loading, error, fetchUsers };
}
Даже с моками логика работы с API остаётся идентичной реальной интеграции, что делает тестирование и разработку максимально близкой к production.
Quasar и MSW позволяют создавать динамические ответы на основе параметров запроса:
rest.get('/api/products/:id', (req, res, ctx) => {
const { id } = req.params;
return res(
ctx.status(200),
ctx.json({ id, title: `Продукт ${id}`, price: 1000 * id })
);
});
Ключевой момент: использование параметров URL и query-параметров позволяет полностью эмулировать поведение backend API.
users, products,
orders) помогает поддерживать читаемость.factories для генерации случайных данных
ускоряет разработку.Эти подходы обеспечивают масштабируемость моков и позволяют легко адаптировать проект под разные стадии разработки и тестирования.