我想为目录中的每个文件创建一个BATS测试,但我不确定完成此操作的最佳方法是什么。即使目录中有许多文件,下面的方法也只会创建一个测试。
#!/usr/bin/env bats
for i in ./*;do
@test "testing $i" {
pwd
}
done
答案 0 :(得分:1)
当BATS运行测试时,首先对文件进行预处理。 1
这会将@test
块替换为实际功能,并将添加到
那个功能。
然后将结果存储在BATS_TMPDIR
bats.${PID}.src
。
任何以编程方式添加的测试都需要添加到预处理文件中。
测试名称也必须添加到BATS_TEST_NAMES
。
将所有这些放在一起我们得到: 2
#!/usr/bin/env bats
declare sFile sSourceFile sTestFunction sTestName
readonly sSourceFile="${BATS_TMPDIR}/bats.$$.src"
if [[ -f "${sSourceFile}" ]];then
for sFile in ./*;do
sTestFunction="test_${sFile}"
sTestName="Testing ${sFile}"
cat <<EOT >> "${sSourceFile}"
$sTestFunction() { bats_test_begin '$sTestName' 0;
return 0
}
bats_test_function "${sTestFunction}"
EOT
BATS_TEST_NAMES+=("${sTestFunction}")
done
fi
#EOF
您的示例的预处理版本如下所示:
#!/usr/bin/env bats
for i in ./*; do
test_testing_-24i() { bats_test_begin "testing $i" 4;
pwd
}
done
bats_test_function test_testing_-24i
如此有效,测试函数被声明为有文件的次数 当下。但是,测试函数只被称为一次。 3
答案 1 :(得分:-1)
这个怎么样?
#!/usr/bin/env bash
declare -r BATS=`mktemp`
trap "rm -f $BATS" EXIT
for i in $(ls)
do
cat > $BATS <<EOF
@test "testing $i" {
pwd
}
EOF
done
bats $BATS