Skip to main content

bash-testing

Test shell scripts with BATS (Bash Automated Testing System). Write, run, and debug tests for bash scripts.

来源信息

仓库
ThinkfleetAI/thinkfleet-engine
最近来源活动
2026年2月1日 16:21
检测到的 SKILL.md 语言
英语
星标
0
Forks
0

安装方式

默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。

检查来源文件

决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。

正在显示 SKILL.md

SKILL.md
来源说明 · 只读预览
name
bash-testing
description
Test shell scripts with BATS (Bash Automated Testing System). Write, run, and debug tests for bash scripts.
metadata
{"thinkfleetbot":{"emoji":"🐚","requires":{"bins":"[Truncated]"},"install":["[Truncated]"]}}
# Bash Testing (BATS) Test shell scripts reliably with the Bash Automated Testing System. ## Run tests ```bash # Run a test file bats test/my_script.bats # Run all tests in directory bats test/ # Verbose output bats --verbose-run test/ # TAP format output (for CI) bats --formatter tap test/ # Pretty output bats --formatter pretty test/ ``` ## Write a test ```bash # test/example.bats #!/usr/bin/env bats setup() { # Runs before each test source ./my_script.sh } teardown() { # Runs after each test rm -f /tmp/test_output } @test "function returns expected output" { result=$(my_function "input") [ "$result" = "expected output" ] } @test "script exits with code 0 on success" { run ./my_script.sh --valid-arg [ "$status" -eq 0 ] } @test "script exits with code 1 on bad input" { run ./my_script.sh --invalid [ "$status" -eq 1 ] [[ "$output" =~ "Error" ]] } @test "output contains expected string" { run ./my_script.sh [ "$status" -eq 0 ] [[ "$output" =~ "Success" ]] } @test "file is created" { run ./my_script.sh --create /tmp/test_output [ "$status" -eq 0 ] [ -f /tmp/test_output ] } ``` ## Key assertions ```bash # Exit status [ "$status" -eq 0 ] # Exact output match [ "$output" = "expected" ] # Regex match [[ "$output" =~ "pattern" ]] # Line-specific output [ "${lines[0]}" = "first line" ] [ "${lines[1]}" = "second line" ] # File exists [ -f "$filepath" ] # String not empty [ -n "$result" ] # Numeric comparison [ "$count" -gt 5 ] ``` ## Using helper libraries ```bash # With bats-support and bats-assert (install separately) setup() { load 'test_helper/bats-support/load' load 'test_helper/bats-assert/load' } @test "readable assertions" { run ./my_script.sh assert_success assert_output --partial "expected text" refute_output --partial "error" assert_line --index 0 "first line" } ``` ## Notes - Install helpers: `git clone https://github.com/bats-core/bats-support test/test_helper/bats-support` and `git clone https://github.com/bats-core/bats-assert test/test_helper/bats-assert`. - Use `setup_file()` / `teardown_file()` for expensive one-time setup. - The `run` keyword captures both stdout and exit status into `$output` and `$status`. - Tests run in subshells — variable changes don't leak between tests.
在 GitHub 查看