Мокирование API — это процесс создания имитации серверных ответов для разработки и тестирования приложений без необходимости обращения к реальному серверу. Этот подход особенно полезен на ранних стадиях разработки, при интеграции с внешними сервисами или когда серверная часть ещё не готова.
// data/users.json
[
{ "id": 1, "name": "Иван" },
{ "id": 2, "name": "Мария" }
]
// src/services/userService.js
import users from '../data/users.json';
export function fetchUsers() {
return new Promise((resolve) => {
setTimeout(() => resolve(users), 500); // имитация задержки сети
});
}
npm install msw --save-dev
Создание обработчика запросов:
// src/mocks/handlers.js
import { rest } from 'msw';
export const handlers = [
rest.get('/api/users', (req, res, ctx) => {
return res(
ctx.status(200),
ctx.json([
{ id: 1, name: 'Иван' },
{ id: 2, name: 'Мария' }
])
);
})
];
Инициализация MSW:
// src/mocks/browser.js
import { setupWorker } from 'msw';
import { handlers } from './handlers';
export const worker = setupWorker(...handlers);
В main.js:
if (process.env.NODE_ENV === 'development') {
const { worker } = require('./mocks/browser');
worker.start();
}
Преимущества MSW:
import axios from 'axios';
axios.interceptors.request.use((config) => {
if (config.url === '/api/users') {
return Promise.resolve({
data: [
{ id: 1, name: 'Иван' },
{ id: 2, name: 'Мария' }
],
status: 200,
statusText: 'OK',
headers: {},
config
});
}
return config;
});
<template>
<div>
<h2>Список пользователей</h2>
<ul>
<li v-for="user in users" :key="user.id">{{ user.name }}</li>
</ul>
</div>
</template>
<script>
import { fetchUsers } from '@/services/userService';
export default {
data() {
return { users: [] };
},
async created() {
this.users = await fetchUsers();
}
};
</script>
process.env.NODE_ENV).services или api.setTimeout позволяет тестировать загрузку и индикаторы
состояния.setup() можно
использовать асинхронные функции с моками через ref или
reactive.import { ref, onMounted } from 'vue';
import { fetchUsers } from '@/services/userService';
export function useUsers() {
const users = ref([]);
const loading = ref(true);
onMounted(async () => {
users.value = await fetchUsers();
loading.value = false;
});
return { users, loading };
}
Мокирование API является ключевым инструментом для ускорения разработки, тестирования и подготовки компонентов Vue.js к взаимодействию с реальными серверными данными, обеспечивая контроль и предсказуемость на всех этапах разработки.