Que fait bats-testing-patterns ?
Maîtrisez le système de tests automatisés Bash (Bats) pour des tests complets de scripts shell. À utiliser lors de l'écriture de tests pour des scripts shell, des pipelines CI/CD, ou pour le développement piloté par les tests d'utilitaires shell.
Aperçu
Ce skill vous guide dans l'utilisation de Bash Automated Testing System (Bats), un framework de test unitaire pour Bash. Il couvre l'installation, l'écriture de cas de test, l'utilisation de helpers d'assertion, et l'intégration avec les pipelines CI/CD.
Installation
Installez Bats via votre gestionnaire de paquets préféré :
# Sur macOS (Homebrew)
brew install bats-core
# Sur Linux (Debian/Ubuntu)
sudo apt-get install bats
# Via npm (si vous utilisez Node.js)
npm install -g bats
Écriture de tests
Créez un fichier avec l'extension .bats :
#!/usr/bin/env bats
setup() {
# Code exécuté avant chaque test
export TEMP_DIR=$(mktemp -d)
}
teardown() {
# Code exécuté après chaque test
rm -rf "$TEMP_DIR"
}
@test "mon premier test" {
run echo "Bonjour"
[ "$output" = "Bonjour" ]
}
Helpers courants
Utilisez les helpers fournis par bats-support et bats-assert :
run <commande>: Exécute une commande et capture le code de retour, la sortie standard et la sortie d'erreur.assert_success: Vérifie que le code de retour est 0.assert_failure: Vérifie que le code de retour n'est pas 0.assert_output <chaîne>: Vérifie que la sortie contient une chaîne spécifique.assert_line --partial <chaîne>: Vérifie qu'une ligne contient une sous-chaîne.
Exemple :
@test "test avec helpers" {
run ls -la /tmp
assert_success
assert_output --partial "total"
}
Intégration CI/CD
GitHub Actions
name: Tests
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Installer Bats
run: sudo apt-get install -y bats
- name: Exécuter les tests
run: bats tests/
GitLab CI
test:
script:
- apt-get update && apt-get install -y bats
- bats tests/
Organisation des tests
Structurez vos tests de manière modulaire :
tests/
├── suite.bats
├── helpers.bash
└── fixtures/
├── script_a.sh
└── script_b.sh
Utilisez load pour inclure des helpers :
load 'helpers'
@test "utilise un helper" {
result=$(ma_fonction_helper)
[ "$result" = "attendu" ]
}
Pour aller plus loin
Consultez la documentation officielle de Bats pour des fonctionnalités avancées comme les tests paramétrés, les fichiers de configuration, et les extensions.