Toolverse
All skills

bats

by OleksandrKucherenko

Bash Automated Testing System (BATS) for TDD-style testing of shell scripts. Use when: (1) Writing unit or integration tests for Bash scripts, (2) Testing CLI tools or shell functions, (3) Setting up test infrastructure with setup/teardown hooks, (4) Mocking external commands

Installation

Pick a client and clone the repository into its skills directory.

Installation

Quick info

Category
Testing
Views
87

About this skill

Bash Automated Testing System (BATS) for TDD-style testing of shell scripts. Use when: (1) Writing unit or integration tests for Bash scripts, (2) Testing CLI tools or shell functions, (3) Setting up test infrastructure with setup/teardown hooks, (4) Mocking external commands (curl, git, docker), (5) Generating JUnit reports for CI/CD, (6) Debugging test failures or flaky tests, (7) Implementing test-driven development for shell scripts.

How to use

  1. Przygotuj strukturę projektu z katalogami src/ (skrypty do testowania) i test/ (testy). W katalogu test/ umieść submoduł bats-core oraz biblioteki pomocnicze: bats-support (formatowanie), bats-assert (asercje), bats-file (operacje na plikach) i plik common-setup.bash dla wspólnej logiki setup'u.

  2. Utwórz plik testowy z rozszerzeniem .bats w katalogu test/unit/ lub test/integration/. Na początku załaduj biblioteki pomocnicze w funkcji setup() — na przykład source "${BATS_TEST_DIRNAME}/test_helper/common-setup.bash".

  3. Pisz testy używając bloków @test. Jeśli testujesz wyjście skryptu, użyj run + assert_output. Dla kodów wyjścia użyj run + assert_success lub assert_failure. Do operacji na plikach użyj asercji z bats-file. Dla mockowania poleceń zewnętrznych (curl, git, docker) zapoznaj się z sekcją gotchas.md w dokumentacji.

  4. Uruchom testy poleceniem ./test/bats/bin/bats test/unit/ (lub wskaż katalog z testami integracyjnymi). Framework wyświetli wyniki w formacie TAP i pokaże, które testy przeszły, a które się nie powiodły.

  5. Jeśli test się zawiesza, sprawdź, czy procesy w tle nie blokują deskryptor pliku 3. Jeśli potoki nie działają, opatrz polecenie wrapperem bash -c lub użyj bats_pipe. Jeśli zmienne znikają, nie używaj run do przypisań — zamiast tego przypisz wartość przed blokiem run.

  6. Aby wygenerować raporty JUnit dla CI/CD, użyj flagi --formatter junit w poleceniu bats i przekieruj wyjście do pliku XML, który następnie możesz zintegrować z systemem ciągłej integracji.

Related skills