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:
1 parent
204ebd5fa5
commit
2cd4a98c55
10 files changed
+588
-87
No files matched your search
+23
-3
@@ -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`,
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user