Esta documentação detalha como executar, validar e entender os testes do projeto Timer Wildtech.
Certifique-se de que as dependências estão instaladas:
npm install# Executa todos os testes uma vez
npm test# Executa testes automaticamente quando arquivos são alterados
npm run test:watch# Gera relatório de cobertura de código
npm run test:coverageO projeto possui 30 testes que cobrem:
- ✅ Valores padrão na inicialização
- ✅ Display inicial mostrando 00:00
- ✅ Configuração de 25 minutos como padrão (Pomodoro)
- ✅ Definição de tempo de 3 minutos
- ✅ Definição de tempo de 25 minutos
- ✅ Atualização correta do display
- ✅ Definição de tempo personalizado válido
- ✅ Rejeição de tempo inválido (0:00)
- ✅ Validação de segundos >= 60
- ✅ Funcionamento apenas com minutos
- ✅ Funcionamento apenas com segundos
- ✅ Inicialização do timer
- ✅ Pausa do timer
- ✅ Reset do timer
- ✅ Contagem regressiva
- ✅ Finalização quando chega a zero
- ✅ Desabilitação do botão start durante execução
- ✅ Habilitação do botão start quando pausado
- ✅ Extração correta do ID da playlist
- ✅ Tratamento de URL inválido
- ✅ Carregamento de playlist no player
- ✅ Extração de ID do YouTube Music
- ✅ Formatação correta do tempo
- ✅ Formatação de zero (00:00)
- ✅ Atualização do título da página
- ✅ Adiciona efeito de aviso quando resta < 60 segundos
- ✅ Remove efeito de aviso quando há > 60 segundos
- ✅ Remove efeito de aviso quando timer termina
- ✅ Adiciona aviso imediatamente se começar com < 60 segundos
- ✅ Remove efeito de aviso quando resetado
Arquivo principal contendo todos os testes unitários.
Configuração global do Jest com:
- Mock do AudioContext para notificações sonoras
- Mock de timers (setTimeout, setInterval)
- Configuração do ambiente JSDOM
Ao executar npm run test:coverage, você obterá:
File | % Stmts | % Branch | % Funcs | % Lines |
timer.js | 100 | 100 | 100 | 100 |
- % Stmts: Percentual de declarações executadas
- % Branch: Percentual de ramificações (if/else) testadas
- % Funcs: Percentual de funções testadas
- % Lines: Percentual de linhas executadas
- Foco em testar cada método da classe Timer
- Isolamento de dependências externas (DOM, Audio)
- Validação de estados internos
- AudioContext: Para testes de notificação sonora
- Timers: Para controle de tempo em testes
- DOM: Elementos HTML simulados
- Operações normais do timer
- Configuração de tempos válidos
- Integração correta com YouTube
- Tempos inválidos
- URLs de playlist incorretos
- Estados inconsistentes
- Timer parado → rodando → pausado
- Botões habilitados/desabilitados
- Reset para estado inicial
# Limpar cache do Jest
npx jest --clearCache
# Reinstalar dependências
rm -rf node_modules
npm install- Verifique se todos os métodos estão sendo testados
- Adicione testes para cenários edge cases
- Teste tanto casos de sucesso quanto de falha
# Executar apenas testes de inicialização
npm test -- --testNamePattern="Inicialização"
# Executar apenas um arquivo de teste
npm test timer.test.js
# Executar testes em modo verbose
npm test -- --verbosedescribe('Nome da Funcionalidade', () => {
beforeEach(() => {
// Configuração antes de cada teste
});
test('deve fazer algo específico', () => {
// Arrange
// Act
// Assert
});
});- Nome descritivo: Teste deve explicar o que faz
- Isolamento: Cada teste deve ser independente
- AAA Pattern: Arrange, Act, Assert
- Casos edge: Teste limites e erros
- Mock externo: Isole dependências
- Testes de integração com navegador
- Testes de performance
- Testes de acessibilidade
- Testes automatizados no CI/CD
Para contribuir com testes, consulte o README.md para instruções de desenvolvimento.