1
0
mirror of https://github.com/sstephenson/bats.git synced 2024-12-26 14:39:46 +01:00

Test (and fix) that teardown runs once after each test

This commit is contained in:
Sam Stephenson 2011-12-28 21:20:43 -06:00
parent 6e65ef449b
commit 43d1972b0e
4 changed files with 39 additions and 5 deletions

View File

@ -52,6 +52,12 @@ bats_test_function() {
BATS_TEST_NAMES["${#BATS_TEST_NAMES[@]}"]="$test_name" BATS_TEST_NAMES["${#BATS_TEST_NAMES[@]}"]="$test_name"
} }
bats_teardown_trap() {
trap bats_exit_trap err exit
teardown
bats_exit_trap
}
bats_exit_trap() { bats_exit_trap() {
trap - err exit trap - err exit
if [ -z "$BATS_TEST_COMPLETED" ]; then if [ -z "$BATS_TEST_COMPLETED" ]; then
@ -84,7 +90,7 @@ bats_perform_test() {
fi fi
BATS_TEST_COMPLETED="" BATS_TEST_COMPLETED=""
trap bats_exit_trap err exit trap bats_teardown_trap err exit
setup setup
"$BATS_TEST_NAME" "$BATS_TEST_NAME"
BATS_TEST_COMPLETED=1 BATS_TEST_COMPLETED=1

View File

@ -55,6 +55,15 @@ teardown() {
@test "setup is run once before each test" { @test "setup is run once before each test" {
rm -f "$TMP/setup.log" rm -f "$TMP/setup.log"
run bats "$FIXTURE_ROOT/setup.bats" run bats "$FIXTURE_ROOT/setup.bats"
[ $status -eq 0 ]
run cat "$TMP/setup.log" run cat "$TMP/setup.log"
[ ${#lines[@]} -eq 3 ] [ ${#lines[@]} -eq 3 ]
} }
@test "teardown is run once after each test, even if it fails" {
rm -f "$TMP/teardown.log"
run bats "$FIXTURE_ROOT/teardown.bats"
[ $status -eq 1 ]
run cat "$TMP/teardown.log"
[ ${#lines[@]} -eq 3 ]
}

View File

@ -1,15 +1,17 @@
LOG="$TMP/setup.log"
setup() { setup() {
echo "$BATS_TEST_NAME" >> "$TMP/setup.log" echo "$BATS_TEST_NAME" >> "$LOG"
} }
@test "one" { @test "one" {
true [ "$(tail -n 1 "$LOG")" = "test_one" ]
} }
@test "two" { @test "two" {
true [ "$(tail -n 1 "$LOG")" = "test_two" ]
} }
@test "three" { @test "three" {
true [ "$(tail -n 1 "$LOG")" = "test_three" ]
} }

17
test/fixtures/teardown.bats vendored Normal file
View File

@ -0,0 +1,17 @@
LOG="$TMP/teardown.log"
teardown() {
echo "$BATS_TEST_NAME" >> "$LOG"
}
@test "one" {
true
}
@test "two" {
false
}
@test "three" {
true
}