Fresh — это современный веб-фреймворк на базе Deno, ориентированный на рендеринг на сервере и минимизацию клиентской нагрузки. Одним из ключевых аспектов разработки в Fresh является обеспечение надежности компонентов через тестирование. В отличие от классических SPA-фреймворков, где логика часто сосредоточена на клиенте, Fresh позволяет тестировать компоненты как на серверной, так и на клиентской стороне, что открывает новые возможности для интеграционного и модульного тестирования.
Компоненты в Fresh чаще всего представляют собой функции, возвращающие HTML-разметку и/или JSX-подобные элементы. Для их тестирования важно понимать:
Для модульного тестирования в Fresh обычно используются библиотеки, совместимые с Deno, например:
std/testing/asserts.ts — базовые утилиты для проверки
условий (assertEquals, assert,
assertStringIncludes).testing-library для Deno — удобный инструмент для
рендеринга компонентов и проверки их состояния.Серверные компоненты в Fresh — это функции, возвращающие HTML или JSON. Пример структуры теста:
import { assertStringIncludes } from "https://deno.land/std/testing/asserts.ts";
import { render } from "fresh/server.ts";
import MyComponent from "../components/MyComponent.tsx";
Deno.test("MyComponent рендерит корректный заголовок", () => {
const html = render(MyComponent, { title: "Тестовый заголовок" });
assertStringIncludes(html, "Тестовый заголовок");
});
Ключевые моменты:
render позволяет получить строку HTML без
необходимости запускать сервер.assert или
assertStringIncludes.Многие компоненты получают данные через API. Для тестирования асинхронного поведения применяются мок-функции:
import { assertEquals } from "https://deno.land/std/testing/asserts.ts";
import fetchMock from "https://deno.land/x/fetch_mock/mod.ts";
import DataComponent from "../components/DataComponent.tsx";
Deno.test("DataComponent отображает данные после загрузки", async () => {
fetchMock.get("https://api.example.com/data", { name: "Alice" });
const html = await DataComponent.render();
assertEquals(html.includes("Alice"), true);
fetchMock.restore();
});
Особенности:
await.Интеграционные тесты проверяют совместную работу нескольких
компонентов и их взаимодействие с серверными маршрутами. Fresh
поддерживает маршрутизацию через файлы в папке routes, что
упрощает тестирование маршрутов:
import { assertEquals } from "https://deno.land/std/testing/asserts.ts";
import { superdeno } from "https://deno.land/x/superdeno/mod.ts";
import app from "../main.ts";
Deno.test("GET /users возвращает список пользователей", async () => {
const response = await superdeno(app).get("/users");
assertEquals(response.status, 200);
assertEquals(response.body.length > 0, true);
});
Особенности:
superdeno позволяет отправлять
HTTP-запросы к приложению без запуска полноценного сервера.Тестирование в Fresh объединяет модульный подход с возможностью интеграции серверной логики и маршрутов, создавая надежный каркас для стабильного развития приложений.