Skrive tester

En viktig del av utviklingen av komponenter er å skrive tester. Med tester er vi mer sikre på at komponentene fungerer som forventet.

Testverktøy

Vi benytter en kombinasjon av testverktøy for å sikre kvaliteten på vår applikasjon og komponenter.

I packages/design-react benytter vi oss av:

  • vitest: Dette er Vites integrerte testkjører.
  • @testing-library/jest-dom: Forenkler testskriving med nyttige DOM-assertions.
  • @testing-library/react: Gir verktøy for å rendre React-komponenter, søke i DOM-en og interagere med den.
  • jest-axe: Integrerer med Jest for å utføre tilgjengelighetssjekker ved hjelp av axe-core biblioteket.

Her er et eksempel på en enkel test:

describe("<Heading />", () => {
  const testContent = "Test Heading";

  it("renders with given content", () => {
    render(<Heading size="md">{testContent}</Heading>);
    const headingElement = screen.queryByText(testContent);
    expect(headingElement).toBeVisible();
  });
});

Tilgjengelighetstesting

Automatiske tester

For tilgjengelighetstesting i packages/design-react bruker vi jest-axe. Den kan identifisere manglende DOM-verdier, som for eksempel en manglende alt-tag i <img />. Her er et eksempel på test av et Heading-komponent:

import { screen, render } from "@testing-library/react";
import { axe } from "jest-axe";
import { Heading } from "./heading";

describe("<Heading />", () => {
  it("is accessible", async () => {
    const { container } = render(
      <Heading size="md">Accessibility Test</Heading>
    );
    expect(await axe(container)).toHaveNoViolations();
  });
)};

jest-axe kjører i jsdom for packages/design-react. Der kan den identifisere manglende DOM-verdier, men kan ikke teste for fargekontrast og layoutdetaljer.

For å pålitelig teste fargekontrast og andre stilrelaterte tilgjengelighetshensyn, må man kjøre tester i en faktisk nettleser.

Her på dokumentasjonsløsningen, i apps/docs, bruker vi Cypress kombinert med cypress-axe for å teste andre tilgjengelighetsproblemer. cypress-axe kan oppdage problemer som for lav fargekontrast eller en forvirrende sidestruktur.

Her er et eksempel på en enkelt sjekk av tilgjengelighet med Cypress:

it("visit homepage and check a11y", () => {
  cy.visit("/");
  cy.injectAxe(); // injectAxe must happen after a visit and before checka11y.
  cy.checkA11y();
});

Manuelle tester

Gjennomsnittlig klarer axe å oppdage halvparten av tilgjengelighetsproblemer. Derfor er det viktig å også teste tilgjengelighet på andre måter, som bruk av skjermlesere, tastaturnavigasjon, forstørrelsesverktøy og brukertesting.