Тесты: часть 1
This commit is contained in:
88
tests/helpers/mock-server.ts
Normal file
88
tests/helpers/mock-server.ts
Normal file
@@ -0,0 +1,88 @@
|
||||
import { http, HttpResponse } from 'msw';
|
||||
import { setupServer } from 'msw/node';
|
||||
|
||||
/**
|
||||
* Создание mock HTTP сервера для тестирования
|
||||
*/
|
||||
export function createMockServer() {
|
||||
const handlers = [
|
||||
// Mock для успешного GET запроса
|
||||
http.get('https://api.example.com/users', () => {
|
||||
return HttpResponse.json([
|
||||
{ id: '1', email: 'user1@example.com', name: 'User 1' },
|
||||
{ id: '2', email: 'user2@example.com', name: 'User 2' },
|
||||
]);
|
||||
}),
|
||||
|
||||
// Mock для GET с параметрами
|
||||
http.get('https://api.example.com/users/:id', ({ params }) => {
|
||||
const { id } = params;
|
||||
if (id === '1') {
|
||||
return HttpResponse.json({ id: '1', email: 'user1@example.com', name: 'User 1' });
|
||||
}
|
||||
return HttpResponse.json({ error: 'Not found' }, { status: 404 });
|
||||
}),
|
||||
|
||||
// Mock для POST запроса
|
||||
http.post('https://api.example.com/users', async ({ request }) => {
|
||||
const body = await request.json() as Record<string, any>;
|
||||
return HttpResponse.json(
|
||||
{ id: '3', ...body },
|
||||
{ status: 201 }
|
||||
);
|
||||
}),
|
||||
|
||||
// Mock для PATCH запроса
|
||||
http.patch('https://api.example.com/users/:id', async ({ request, params }) => {
|
||||
const body = await request.json() as Record<string, any>;
|
||||
return HttpResponse.json({ id: params.id, ...body });
|
||||
}),
|
||||
|
||||
// Mock для DELETE запроса
|
||||
http.delete('https://api.example.com/users/:id', () => {
|
||||
return new HttpResponse(null, { status: 204 });
|
||||
}),
|
||||
|
||||
// Mock для авторизации
|
||||
http.post('https://api.example.com/auth/login', async ({ request }) => {
|
||||
const body = await request.json() as any;
|
||||
if (body.email === 'test@example.com' && body.password === 'password') {
|
||||
return HttpResponse.json({ token: 'mock-jwt-token' });
|
||||
}
|
||||
return HttpResponse.json({ error: 'Unauthorized' }, { status: 401 });
|
||||
}),
|
||||
|
||||
// Mock для защищенного endpoint
|
||||
http.get('https://api.example.com/profile', ({ request }) => {
|
||||
const auth = request.headers.get('Authorization');
|
||||
if (auth && auth.startsWith('Bearer ')) {
|
||||
return HttpResponse.json({ id: '1', email: 'test@example.com' });
|
||||
}
|
||||
return HttpResponse.json({ error: 'Unauthorized' }, { status: 401 });
|
||||
}),
|
||||
|
||||
// Mock для ошибки сервера
|
||||
http.get('https://api.example.com/error', () => {
|
||||
return HttpResponse.json({ error: 'Internal Server Error' }, { status: 500 });
|
||||
}),
|
||||
|
||||
// Mock для network error
|
||||
http.get('https://api.example.com/network-error', () => {
|
||||
return HttpResponse.error();
|
||||
}),
|
||||
];
|
||||
|
||||
const server = setupServer(...handlers);
|
||||
|
||||
return {
|
||||
server,
|
||||
start: () => server.listen({ onUnhandledRequest: 'warn' }),
|
||||
stop: () => server.close(),
|
||||
reset: () => server.resetHandlers(),
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Тип для mock сервера
|
||||
*/
|
||||
export type MockServer = ReturnType<typeof createMockServer>;
|
||||
Reference in New Issue
Block a user