Skip to content

Фикстуры и хелперы

Кастомные Playwright фикстуры для аутентификации и утилиты валидации API ответов.

Фикстуры

auth.fixture.ts

Фикстура для аутентифицированных API тестов. Расширяет стандартный test из @playwright/test.

Предоставляет:

  • authToken — JWT токен пользователя (через POST /api/auth/sign-in)
  • authenticatedRequestAPIRequestContext с заголовком Authorization: Bearer <token>
typescript
import { test as base } from "@playwright/test";
import { environment } from "../../src/environments/environment";

export const test = base.extend<{ authToken: string; authenticatedRequest: APIRequestContext }>({
	authToken: async ({ request }, use) => {
		const response = await request.post(`${environment.apiBaseUrl}/api/auth/sign-in`, {
			data: {
				email: environment.testUserEmail,
				password: environment.testUserPassword
			}
		});
		const body = await response.json();
		await use(body.data.accessToken);
	},

	authenticatedRequest: async ({ playwright, authToken }, use) => {
		const context = await playwright.request.newContext({
			baseURL: environment.apiBaseUrl,
			extraHTTPHeaders: { Authorization: `Bearer ${authToken}` }
		});
		await use(context);
		await context.dispose();
	}
});

Использование в тестах:

typescript
import { expect, test } from "../fixtures/auth.fixture";

test("GET /api/companies", async ({ authenticatedRequest }) => {
	const response = await authenticatedRequest.get("/api/companies");
	expect(response.ok()).toBe(true);
});

admin-auth.fixture.ts

Аналогичная фикстура для admin тестов с отдельными credentials.

Предоставляет:

  • adminToken — JWT токен администратора (через POST /api/admin/auth/sign-in)
  • adminRequestAPIRequestContext с admin Bearer токеном

Использование:

typescript
import { expect, test } from "../fixtures/admin-auth.fixture";

test("GET /api/admin/users", async ({ adminRequest }) => {
	const response = await adminRequest.get("/api/admin/users");
	expect(response.ok()).toBe(true);
});

Хелперы

api.helper.ts

Утилиты для валидации структуры API ответов.

expectSuccessResponse(response)

Проверяет успешный ответ и возвращает body.data:

typescript
const data = await expectSuccessResponse(response);
// Проверяет: response.ok() && body.success === true
// Возвращает: body.data

expectPaginatedResponse(response)

Проверяет пагинированный ответ:

typescript
const data = await expectPaginatedResponse(response);
// Проверяет: response.ok() && body.success === true
// Проверяет наличие: data, totalCount, page
// Возвращает: body

expectErrorResponse(response, statusCode)

Проверяет ошибочный ответ с конкретным HTTP статусом:

typescript
await expectErrorResponse(response, 401);
// Проверяет: response.status() === 401

createResource(request, path, data) / deleteResource(request, path)

Хелперы для создания и удаления ресурсов:

typescript
const created = await createResource(authenticatedRequest, "/api/companies", { name: "Test" });
await deleteResource(authenticatedRequest, `/api/companies/${created.id}`);

Setup

auth.setup.ts

Playwright setup-проект для browser аутентификации. Выполняется перед client тестами.

Шаги:

  1. Открывает /auth/sign-in в Chromium
  2. Заполняет поля email и password из environment
  3. Нажимает кнопку входа
  4. Ожидает навигацию (редирект с /auth/)
  5. Сохраняет storageState в playwright/.auth/user.json

storageState

Файл playwright/.auth/user.json содержит cookies и localStorage после авторизации. Он автоматически подключается ко всем client тестам через настройку storageState в playwright.config.ts.

Следующие шаги

SaaS E2E Test Documentation