ENbext.dev
DocumentationOutils pour applications

Traduction automatique depuis l’anglais. Consulter l’original.

Sur cette page

Essai

bext donne aux applications PRISM les deux ergonomies de test que vous connaissez de Laravel et de la bibliothèque de tests, toutes deux exécutables en clair bun test :

  • @bext-stack/framework/testkit — Usines modèles pour les données de test ensemencées et un client de test d'itinéraire qui invoque le loader/action d'un itinéraire avec une requête synthétisée. Pur, pas de DOM, pas de serveur.
  • @bext-stack/framework/testing — Test de composants : rendu d'un Composant "use signals", interrogez-le, interagissez et affirmez (soutenu par happy-dom).

Usines#

ts
import { defineFactory, cycle } from "@bext-stack/framework/testkit";

const userFactory = defineFactory((n) => ({
  id: `u${n}`,
  email: `user${n}@example.com`,        // `n` gives unique fields
  role: cycle("admin", "member")(n),    // cycle by index
  active: true,
}));

const users = userFactory.makeMany(3);              // 3 seeded users
const admin = userFactory.make({ role: "admin" });  // one, overridden
const admins = userFactory.state(() => ({ role: "admin" })).makeMany(2); // a variant (states)

make / makeMany avance une séquence afin que les champs uniques restent uniques ; makeMany(n, i => ({...})) prend des remplacements par index ; state(fn) dérive une usine de variantes (états d'usine Laravel) ; reset() remet à zéro la séquence.

Client de test d'itinéraire#

testRoute(module) encapsule les exportations loader / action d'une route et les appelle avec un Request synthétisé :

ts
import { testRoute } from "@bext-stack/framework/testkit";
import * as signup from "../app/signup/page";

test("rejects an invalid signup", async () => {
  const route = testRoute(signup);
  const res = await route.post({ email: "nope", age: "12" });   // form-encoded → action
  expect(res.ok).toBe(false);
});

test("loader reads query params", async () => {
  expect(await testRoute(signup).get({ ref: "promo" })).toMatchObject({ ref: "promo" });
});
Membre Appels
.get(query?) le loader avec une demande GET
.post(fields?) le action avec un POST codé par forme
.postJson(body) le action avec un JSON POST
.request(req) soit un gestionnaire avec un Request explicite (en-têtes/cookies personnalisés)

Générateurs de requêtes autonomes — formData(obj), formRequest(url, fields), jsonRequest(url, body) — sont également exportés et les usines alimentent directement les entrées d'action : route.post(userFactory.make()).

Tests de composants#

ts
import { render } from "@bext-stack/framework/testing";

const { text, getByTestId, click } = render(Counter, { start: 5 });
expect(text()).toContain("Count: 5");
click(getByTestId("inc"));
expect(text()).toContain("Count: 6");

render SSRs + hydrate le composant dans un conteneur happy-dom et renvoie les requêtes ( getByText, getByTestId, getAllByTag ) et les interactions ( click, type, fire ). Importez-le uniquement à partir des fichiers de test — il récupère Happy-Dom.

Essayez-le#

Le démo du kit de test en direct génère des données d'usine et exécute les assertions testRoute dans l'isolat — les mêmes assistants que vous utiliseriez dans bun test. Source dans sites/demo/src/app/examples/testkit/page.tsx.

Voir aussi#

Modifier cette page ↗Besoin d’aide ? ↗
Rechercher dans la documentation

Saisissez un sujet, une commande ou une question.