bats-testing-patterns
Ajuda seu agente a testar scripts de shell. É útil para garantir que os scripts funcionem corretamente e para desenvolvimento com testes.
O que ela faz
Este guia ensina como criar testes automáticos para seus scripts de linha de comando (shell scripts) usando uma ferramenta chamada Bats. Ele mostra como verificar se seus scripts funcionam corretamente, lidam com erros e são compatíveis com diferentes ambientes.
Quando usar
- ✓Quando você escreve scripts que precisam ser confiáveis.
- ✓Ao configurar testes automáticos para projetos.
- ✓Para garantir que seus scripts funcionem em diferentes sistemas.
Exemplo do que pedir para a IA
“Como posso testar se meu script de backup falha quando o disco está cheio?”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
O Bats permite escrever testes em arquivos especiais. Cada teste verifica uma parte específica do seu script, como se ele retorna o resultado esperado ou se lida com erros corretamente. Ele pode até simular condições como arquivos faltando ou permissões negadas.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add wshobson/agents --skill bats-testing-patternsOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/wshobson/agents/main/plugins/shell-scripting/skills/bats-testing-patterns/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Padrões de Teste com Bats
Orientação abrangente para escrever testes unitários completos para scripts shell usando Bats (Bash Automated Testing System), incluindo padrões de teste, fixtures e melhores práticas para testes de scripts em nível de produção.
Quando Usar Esta Habilidade
- Escrever testes unitários para scripts shell
- Implementar desenvolvimento guiado por testes (TDD) para scripts
- Configurar testes automatizados em pipelines de CI/CD
- Testar casos extremos e condições de erro
- Validar o comportamento em diferentes ambientes de shell
- Construir suítes de teste de scripts de fácil manutenção
- Criar fixtures para cenários de teste complexos
- Testar múltiplos dialetos de shell (bash, sh, dash)
Padrões Detalhados e Exemplos Práticos
A documentação detalhada dos padrões está em references/details.md. Leia este arquivo quando o nível de navegação acima for insuficiente.
Testando Condições de Erro
#!/usr/bin/env bats
@test "Function fails with missing file" {
run my_function "/nonexistent/file.txt"
[ "$status" -ne 0 ]
[[ "$output" == *"not found"* ]]
}
@test "Function fails with invalid input" {
run my_function ""
[ "$status" -ne 0 ]
}
@test "Function fails with permission denied" {
touch "$TMPDIR/readonly.txt"
chmod 000 "$TMPDIR/readonly.txt"
run my_function "$TMPDIR/readonly.txt"
[ "$status" -ne 0 ]
chmod 644 "$TMPDIR/readonly.txt" # Cleanup
}
@test "Function provides helpful error message" {
run my_function --invalid-option
[ "$status" -ne 0 ]
[[ "$output" == *"Usage:"* ]]
}
Testando com Dependências
#!/usr/bin/env bats
setup() {
# Check for required tools
if ! command -v jq &>/dev/null; then
skip "jq is not installed"
fi
export SCRIPT="${BATS_TEST_DIRNAME}/../bin/script.sh"
}
@test "JSON parsing works" {
skip_if ! command -v jq &>/dev/null
run my_json_parser '{"key": "value"}'
[ "$status" -eq 0 ]
}
Testando Compatibilidade de Shell
#!/usr/bin/env bats
@test "Script works in bash" {
bash "${BATS_TEST_DIRNAME}/../bin/script.sh" arg1
}
@test "Script works in sh (POSIX)" {
sh "${BATS_TEST_DIRNAME}/../bin/script.sh" arg1
}
@test "Script works in dash" {
if command -v dash &>/dev/null; then
dash "${BATS_TEST_DIRNAME}/../bin/script.sh" arg1
else
skip "dash not installed"
fi
}
Execução Paralela
#!/usr/bin/env bats
@test "Multiple independent operations" {
run bash -c 'for i in {1..10}; do
my_operation "$i" &
done
wait'
[ "$status" -eq 0 ]
}
@test "Concurrent file operations" {
for i in {1..5}; do
my_function "$TMPDIR/file$i" &
done
wait
[ -f "$TMPDIR/file1" ]
[ -f "$TMPDIR/file5" ]
}
Padrão de Auxiliar de Teste
test_helper.sh
#!/usr/bin/env bash
# Source script under test
export SCRIPT_DIR="${BATS_TEST_DIRNAME%/*}/bin"
# Common test utilities
assert_file_exists() {
if [ ! -f "$1" ]; then
echo "Expected file to exist: $1"
return 1
fi
}
assert_file_equals() {
local file="$1"
local expected="$2"
if [ ! -f "$file" ]; then
echo "File does not exist: $file"
return 1
fi
local actual=$(cat "$file")
if [ "$actual" != "$expected" ]; then
echo "File contents do not match"
echo "Expected: $expected"
echo "Actual: $actual"
return 1
fi
}
# Create temporary test directory
setup_test_dir() {
export TEST_DIR=$(mktemp -d)
}
cleanup_test_dir() {
rm -rf "$TEST_DIR"
}
Integração com CI/CD
Fluxo de Trabalho do GitHub Actions
name: Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install Bats
run: |
npm install --global bats
- name: Run Tests
run: |
bats tests/*.bats
- name: Run Tests with Tap Reporter
run: |
bats tests/*.bats --tap | tee test_output.tap
Integração com Makefile
.PHONY: test test-verbose test-tap
test:
bats tests/*.bats
test-verbose:
bats tests/*.bats --verbose
test-tap:
bats tests/*.bats --tap
test-parallel:
bats tests/*.bats --parallel 4
coverage: test
# Optional: Generate coverage reports
Melhores Práticas
- Teste uma coisa por teste - Princípio da responsabilidade única
- Use nomes de teste descritivos - Declara claramente o que está sendo testado
- Limpe após os testes - Sempre remova arquivos temporários na desmontagem
…
Perguntas frequentes
O que são 'testes unitários'?
São pequenos testes que verificam uma única parte (unidade) do seu código para garantir que ela funcione como esperado.
O que é 'CI/CD'?
É um processo automático que testa e implanta seu código sempre que você faz alterações, ajudando a encontrar problemas rapidamente.
O que são 'fixtures'?
São dados ou configurações pré-definidas que os testes usam para simular cenários específicos.
Detalhes
Descrição original do autor
Master Bash Automated Testing System (Bats) for comprehensive shell script testing. Use when writing tests for shell scripts, CI/CD pipelines, or requiring test-driven development of shell utilities.
repo: wshobson/agents
Popularidade
- Estrelas no GitHub
- 41 mil
- Posição no ranking
- #4951
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
screen-reader-testing
Faz seu agente testar sites usando leitores de tela para garantir que sejam acessíveis.
wshobson/agents
wcag-audit-patterns
Ajuda seu agente a auditar sites para acessibilidade e corrigir problemas de acordo com as diretrizes WCAG.
wshobson/agents
multi-reviewer-patterns
Faz seu agente coordenar revisões de código paralelas, deduplicando achados e consolidando relatórios.
wshobson/agents
parallel-debugging
Permite ao agente depurar problemas complexos com investigações paralelas e análise de causa raiz.
wshobson/agents
Skills parecidas
cpp-testing
Faz seu agente escrever e melhorar testes para código C++. Ajuda a configurar ferramentas de teste e a corrigir erros.
affaan-m/ECC
csharp-testing
Ajuda seu agente a criar testes para código C# e .NET. Ele usa as melhores práticas para garantir que os testes sejam eficientes e confiáveis.
affaan-m/ECC
django-tdd
Faz seu agente aplicar estratégias de teste para Django com pytest-django e TDD. É útil para escrever testes robustos e garantir a qualidade do código, especialmente para APIs DRF.
affaan-m/ECC