- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一些 bats我运行以测试某些功能的脚本如何在脚本中回显 bats 文件名?
我的 bats 脚本如下所示:
#!/usr/bin/env bats
load test_helper
echo $BATS_TEST_FILENAME
@test "run cloned mission" {
blah blah blah
}
为了让我的报告显示为:
✓ run cloned mission
✓ run cloned mission
✓ addition using bc
---- TEST NAME IS xxx
✓ run cloned mission
✓ run cloned mission
✓ addition using bc
---- TEST NAME IS yyy
✓ run cloned mission
✓ run cloned mission
✓ addition using bc
但是报错了
2: syntax error:
operand expected (error token is ".bats
2")
正确的做法是什么?我不想更改集名称,因为它只是为了在不同测试之间回显文件名。
谢谢。
最佳答案
只需使用 #
作为消息前缀并将其重定向到 fd3(已记录 in the project README)的组合,从 setup
函数输出文件名。
#!/usr/bin/env bats
setup() {
if [ "${BATS_TEST_NUMBER}" = 1 ];then
echo "# --- TEST NAME IS $(basename ${BATS_TEST_FILENAME})" >&3
fi
}
@test "run cloned mission" {
blah blah blah
}
最简单的解决方案是迭代所有测试文件并自己输出文件名:
for file in $(find ./ -name '*.bats');do
echo "--- TEST NAME IS ${file}"
bats "${file}"
done
此解决方案的缺点是您在最后丢失了摘要。相反,每个文件后都会给出一个摘要。
设置
函数在 BATS 中最简单的解决方案是从 setup
函数输出文件名。我认为这就是您所追求的解决方案。
代码如下所示:
setup() {
if [ "${BATS_TEST_NUMBER}" = 1 ];then
echo "# --- TEST NAME IS $(basename ${BATS_TEST_FILENAME})" >&3
fi
}
一些注意事项:
#
>&3
)@test
下一个解决方案是在每个文件中添加以下内容作为第一个测试:
@test "--- TEST NAME IS $(basename ${BATS_TEST_FILENAME})" {
skip ''
}
这里的缺点是skipped
测试的数量会增加...
我能想到的唯一其他解决方案是创建一个存在于全局范围内并跟踪其状态的测试助手。
这样的代码看起来像这样:
output-test-name-helper.bash
#!/usr/bin/env bash
create_tmp_file() {
local -r fileName="$(basename ${BATS_TEST_FILENAME})"
if [[ ! -f "${BATS_TMPDIR}/${fileName}" ]];then
touch "${BATS_TMPDIR}/${fileName}"
echo "---- TEST NAME IS ${fileName}" >&2
fi
}
remove_tmp_file() {
rm "${BATS_TMPDIR}/$(basename ${BATS_TEST_FILENAME})"
}
trap remove_tmp_file EXIT
create_tmp_file
然后可以在每个测试中加载:
#!/usr/bin/env bats
load output-test-name-helper
@test "run cloned mission" {
return 0
}
这里的主要缺点是不能保证输出最有可能结束。
从 @test
、setup
和 teardown
函数外部添加输出可能会导致意外结果。
此类代码还将(至少)为每个测试调用一次,从而减慢执行速度。
作为最后的手段,您可以自己修补 BATS 的代码,在 the BATS repository 上打开一个 pull-request。并希望 BATS native 支持此功能。
生活就是一堆取舍。选择最符合您需求的解决方案。
关于bash - bats - 我如何在 bats 脚本中回显文件名以进行报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48398838/
我是一名优秀的程序员,十分优秀!