Pular para o conteúdo principal

Testes E2E (front-tests-e2e)

cactus-agents/front-tests-e2e (package cactus-front-e2e) é a suíte end-to-end em Playwright do front-web-base. Roda contra um ambiente já publicado (dev, stage ou prod), não contra um dev server local.

:::caution Não roda no CI O único workflow do repo é delete-merged-branch.yml. Não existe workflow que execute a suíte. Ela é rodada manualmente, tipicamente via feca test. Não assuma cobertura E2E como gate de merge. :::

O repo é clonado pelo setup default (tag initial).

Rodando via feca test (recomendado)

feca test # seleção interativa de brand + ambiente
feca test --headed # flags do Playwright passam direto
feca test tests/casino # roda só um diretório

O comando:

  1. Confirma que front-tests-e2e e front-web-base estão clonados.

  2. Seleciona a brand varrendo os .dev.vars.* do base (excluindo .dev.vars.example). Zero arquivos → usa o .dev.vars default; um → auto-seleciona; vários → pergunta.

  3. ORIGIN_DOMAIN do .dev.vars.<brand> escolhido (fallback no .dev.vars simples). Se ficar vazio, erra.

  4. Pergunta o ambientedev, stage ou prod — e monta a BASE_URL:

    EscolhaBASE_URL
    devhttps://dev.<ORIGIN_DOMAIN>
    stagehttps://stage.<ORIGIN_DOMAIN>
    prodhttps://<ORIGIN_DOMAIN>
  5. Faz bootstrap das dependências se necessário: pnpm install, e pnpm run install:browsers se não houver chromium em cache.

  6. Roda BASE_URL=<url> pnpm --dir <e2e> test, repassando seus argumentos ao Playwright.

Rodando direto no repo

cd repos/front-tests-e2e
pnpm install
pnpm install:browsers # playwright install chromium

pnpm test # playwright test
pnpm test:ui # modo UI
pnpm test:headed
pnpm test:debug
pnpm report # playwright show-report

# por área
pnpm test:smoke # tests/smoke
pnpm test:auth # tests/auth
pnpm test:casino # tests/casino
pnpm test:nav # tests/navigation
pnpm test:profile # tests/user
pnpm test:skeleton-parity # tests/skeleton

Configuração

playwright.config.ts carrega um .env via dotenv (gitignored; o template é .env.example).

ItemValor
testDir./tests
ProjectsDesktop Chrome (devices["Desktop Chrome"]) e Mobile Chrome (devices["Pixel 5"])
baseURLprocess.env.BASE_URL, com fallback embutido
Reportershtml (pasta playwright-report, open: "never") + line
ParalelismofullyParallel: true; workers: 1 em CI
Retries2 em CI, 0 local
Artefatos em falhatrace: on-first-retry, screenshot: only-on-failure, video: on-first-retry
Timeoutsteste 60s, expect 10s, action 10s, navigation 30s

Só chromium é instalado — não há projects de Firefox/WebKit.

Variáveis de ambiente

VariávelUso
BASE_URLOrigem alvo. Setada pelo feca test; se você roda direto, precisa setar
E2E_USERNAME / E2E_PASSWORDCredenciais usadas nos testes de login e de perfil
CIAtiva forbidOnly, retries e workers: 1

:::caution Credenciais E2E_USERNAME / E2E_PASSWORD vão no .env local (gitignored). Não commite credenciais e não as coloque em .env.example além dos placeholders. :::

O que a suíte cobre

tests/auth/login.spec.ts
tests/casino/browse.spec.ts
tests/navigation/main-nav.spec.ts
tests/skeleton/skeleton-parity.spec.ts
tests/smoke/pages.spec.ts
tests/user/profile.spec.ts
fixtures/base.ts
fixtures/i18n.ts
fixtures/pages/{AppPage,AuthModal,GamesPage,HomePage,UserProfilePage}.ts
ÁreaCobertura
smokeSaúde das páginas públicas em dois níveis. CORE (tem que carregar em toda brand): /, /games, /games/live, /sports, /search. EXTRA (404 aceitável se a brand desliga): /vip, /vip/missions, /vip/levels, /promotions, /ajuda, /blog. Mais um teste da página 404. Assertivas: status < 500, ausência de texto de error boundary de BFF/brand-config (pt-br/es/en), e header visível
authModal de login (botões visíveis, modal abre com email+senha, Escape fecha, erro de credencial inválida) e login real (login some após sucesso, navegação pro hub de cassino, sessão sobrevive à navegação SPA)
casinoPágina de cassino, cassino ao vivo e busca: cards renderizam, clique abre detalhe/modal, página de detalhe renderiza, input de busca com query e slug conhecido
navigationHeader desktop (logo→home, Casino, Sports, busca) e bottom nav mobile
userPerfil: aba de dados pessoais (email/telefone/documento/banco-Pix), navegação entre abas, aba de carteira (depósito/saque), histórico, prêmios e recompensas
skeletonAuditoria de paridade de skeleton com o freeze dev-only ?__skeleton=1, parametrizada por rota — o skeleton congelado tem que casar com a geometria resolvida

Os page objects em fixtures/pages/ são o ponto de extensão: adicione locators lá em vez de espalhar seletores pelos specs. O alias ~fixtures/* aponta para ./fixtures/*.

Escrevendo teste novo

  • Multi-brand por construção. A mesma suíte roda contra qualquer brand, então não assuma rota, texto ou feature que só uma brand tem. Se a rota é opcional, trate 404 como aceitável (padrão do tier EXTRA do smoke).
  • i18n. Há um fixture fixtures/i18n.ts justamente porque o texto muda por país (pt-br / es / en). Não asserte string literal de UI sem passar por ele.
  • Sem dados inventados. Os testes batem em ambiente real; use slugs e categorias que existem, ou derive o alvo da própria página.