Pular para o conteúdo

Testes

Configuração

Verifique sua mudança no seu computador antes de enviar.

  • Termine a Configuração inicial. Os testes Go servem o app web compilado, então compile o app web primeiro.

  • Instale o navegador de teste uma vez:

    Terminal window
    npx --prefix app/frontend playwright install chromium

Execute as verificações do dia a dia

Link para Execute as verificações do dia a dia
  1. Compile o código Go e passe o vet:

    Terminal window
    go build ./...
    go vet ./...
  2. Execute os testes Go:

    Terminal window
    go test ./...
  3. Verifique e teste o app web:

    Terminal window
    npm --prefix app/frontend run check
    npm --prefix app/frontend run lint
    npm --prefix app/frontend run test
  4. Execute as regras de camadas e de organização dos arquivos:

    Terminal window
    go test -tags structure ./app/backend/tools/structurecheck

Você não deve ver nenhuma falha. O CI executa os mesmos comandos, os de Go em amd64 e arm64, mais uma execução com o detector de race (go test -race ./...).

Execute os testes de ponta a ponta

Link para Execute os testes de ponta a ponta

Os testes de ponta a ponta controlam um navegador de verdade contra um programa de verdade. Execute o projeto da área em que você mexeu:

Terminal window
npm --prefix app/frontend run e2e -- --project=movies

A execução inicia seu próprio HolyArrs em uma pasta de configuração nova. O projeto setup cria o dono primeiro, e a maioria dos outros projetos espera por ele. Execute a suíte completa, sem --project, antes de uma versão.

Quais projetos executar

Link para Quais projetos executar
Você mudou Execute
Filmes movies
Séries shows
Pedidos requests, lists, reports
Downloads sources, downloaders, downloads
Login e usuários accounts, kid
Saúde e agendamentos schedules, controls
Layout das páginas desktop, phone, a11y

Os nomes dos projetos estão em app/frontend/playwright.config.ts. Um projeto que depende de outro executa o outro primeiro.

Para onde vai um teste novo

Link para Para onde vai um teste novo
Tipo Onde
Go Ao lado do arquivo que ele testa
Unitário web Ao lado do arquivo dele, como name.test.ts
Ponta a ponta app/tests/<module>/

Nunca chame um serviço externo de verdade. Adicione um substituto em app/tests/fakes. Um teste que só passa no seu computador está quebrado.

Sintoma. Uma verificação de estrutura falha. Causa. A mensagem diz qual é o arquivo e qual regra você quebrou. Solução. Mova o código, ou passe dados simples a partir do módulo mais alto. Veja Módulos.

Sintoma. Os testes de ponta a ponta não iniciam. Causa. O navegador de teste não está instalado. Solução. Execute a linha playwright install acima.

Sintoma. Os testes Go falham por falta de páginas. Causa. O app web não foi compilado. Solução. Execute npm --prefix app/frontend run build.

Tags de compilação

Um teste com tag é pulado em um go test ./... simples. Passe -tags <tag> para executar o teste.

Tag Contém
structure As regras de camadas, de organização dos arquivos, de lugar do SQL e de comentários em tools/structurecheck
measure Verificações de tempo de download
lab Testes contra apps de verdade em um laboratório de testes. Eles leem HOLYARRS_LAB_* e são pulados quando essas variáveis não estão definidas
labms, livesubs Execuções de laboratório para servidores de mídia e sites de legendas reais
Execuções longas e de falha

O CI executa estas além dos testes simples. Execute todas antes de uma versão.

Terminal window
go test -count=1 -run '^TestFault|^TestCrashInEveryLoopIsContained$' ./app/backend/cmd/holyarrs
HOLYARRS_RESTART_TIMING=1 go test -count=1 -run '^TestCrashRestartTime$' ./app/backend/cmd/holyarrs
HOLYARRS_MEMORY=1 go test -count=1 -timeout 30m -run '^TestMemoryPartsRuns$' ./app/backend/cmd/holyarrs
go test -count=1 -run '^TestDownloaderConformance$' ./app/backend/internal/downloads
Variável Faz
HOLYARRS_FAULT_OUT Arquivo onde as execuções de falha escrevem a tabela delas
HOLYARRS_RESTART_TIMING, HOLYARRS_RESTART_TIMING_OUT Ativam a medição de tempo da falha até o login e dão nome ao arquivo de saída dela
HOLYARRS_MEMORY, HOLYARRS_MEMORY_OUT Ativam as execuções de memória e dão nome ao arquivo de saída delas
HOLYARRS_CRASH_RUNS, HOLYARRS_CRASH_SEED Rodadas e semente do loop de falhas em app/backend/internal/mediafiles/dbtests (crash_test.go), que é pulado com -short
Servidores substitutos e variáveis

Os testes de ponta a ponta iniciam servidores substitutos para os Gerenciadores de downloads, as Fontes e o servidor de metadados, então nenhum teste chega a um serviço de verdade. Os testes definem variáveis como HOLYARRS_TMDB_URL, HOLYARRS_MUSICBRAINZ_URL, HOLYARRS_PLEX_URL e HOLYARRS_QBITTORRENT_URL para apontar o programa para eles. Uma instalação de verdade nunca precisa dessas variáveis.

O contrato da API tem seus próprios testes. O TestOpenAPIGenerated falha quando o openapi.json fica diferente das rotas, e o snapshot da tabela de rotas em tools/structurecheck/testdata falha com qualquer rota adicionada, removida ou movida.

O HolyArrs é gratuito. Se ele poupou seu tempo, dê uma estrela no GitHub, patrocine o projeto ou me pague um café.