test: e2e mais rígida e .gitattributes

Zero telas sem texto no computador e no celular; atalho de teclado em até 4 Tabs e linear em até 36 com o inventário das paradas; ciclo de foco do menu com a barra de cookies; oferta e cabeçalho levando ao formulário; foco vindo de outra página; separador da faixa de clientes; contagem de pôsteres da SEV. .gitattributes com eol=lf.
This commit is contained in:
Evandro Fonseca Junior committed 2026-10-14 19:14:49 -03:00
1 parent 204ebd5fa5
commit 2cd4a98c55
10 files changed
+588 -87

No files matched your search

+23 -3
View File
@@ -1,13 +1,22 @@
import AxeBuilder from "@axe-core/playwright";
import { expect, test } from "@playwright/test";
import { DESKTOP, PHONE, sitemapPaths } from "./helpers";
import { DESKTOP, isDevServer, PHONE, sitemapPaths } from "./helpers";
/**
* (a) Todas as rotas do /sitemap.xml respondem 200, sem erro de console e sem rolagem horizontal, no computador
* (1440x900) e no celular (390x844).
* (b) O axe não acha violação serious ou critical em nenhuma delas, nos mesmos dois tamanhos.
* As rotas vêm do próprio sitemap: uma página nova entra no teste sozinha.
*
* Erro de console é falha, sem exceção em produção. Única exceção, só quando o BASE_URL é um servidor de
* desenvolvimento (`next dev`, detectado por isDevServer): o aviso do React "Each child in a list should have a
* unique "key" prop", que só existe no React de desenvolvimento (o build de produção não o emite) e que a pilha
* atribui a `OuterLayoutRouter`, do roteador do próprio Next, e não a um componente do site. Ele não é
* esquecido: cada rota em que aparece fica anotada no relatório do teste ("aviso do next dev ignorado"). Qualquer
* outro erro de console reprova nos dois modos.
*/
const DEV_ONLY_KEY_WARNING =
/Each child in a list should have a unique "key" prop/;
const VIEWPORTS = [
{ name: "computador 1440x900", size: DESKTOP },
@@ -24,6 +33,8 @@ for (const { name, size } of VIEWPORTS) {
}) => {
const paths = await sitemapPaths(request);
expect(paths.length, "rotas no sitemap").toBeGreaterThan(10);
const dev = await isDevServer(request);
const ignoredWarnings = new Set<string>();
for (const path of paths) {
await test.step(path, async () => {
@@ -31,8 +42,12 @@ for (const { name, size } of VIEWPORTS) {
const onConsole = (
message: import("@playwright/test").ConsoleMessage,
) => {
if (message.type() === "error")
problems.push(`console.error: ${message.text()}`);
if (message.type() !== "error") return;
if (dev && DEV_ONLY_KEY_WARNING.test(message.text())) {
ignoredWarnings.add(path);
return;
}
problems.push(`console.error: ${message.text()}`);
};
const onPageError = (error: Error) =>
problems.push(`erro não tratado: ${error.message}`);
@@ -60,6 +75,11 @@ for (const { name, size } of VIEWPORTS) {
.toBeLessThanOrEqual(0);
});
}
for (const path of ignoredWarnings)
test.info().annotations.push({
type: "aviso do next dev ignorado",
description: `${path}: Each child in a list should have a unique "key" prop`,
});
});
});
}