有没有办法从蝙蝠测试中保释出来?
Is there a way to bail from a bats test?
有没有办法摆脱整个测试文件?整个测试套件?
类似于
@test 'dependent pgm unzip' {
command -v unzip || BAIL 'missing dependency unzip, bailing out'
}
编辑:
我可以做类似的事情
#!/usr/bin/env bats
if [[ -z "$(type -t unzip)" ]]; then
echo "Missing dep unzip"
exit 1
fi
@test ...
这对于测试开始时 运行 的检查工作正常,只是它不作为报告的一部分输出。
但是,如果我想确定源脚本是否正确定义了一个函数,如果没有,则放弃,添加这种测试可以防止生成任何类型的报告。不显示成功的测试。
TL;DR
- 要查看中止消息,请使用
>&2
在全局范围内将消息重定向到 stderr
。
- 要在失败后中止 所有 文件,请在全局范围内使用
exit 1
。
- 要仅中止单个文件,请创建一个
setup
函数,该函数使用 skip
仅中止该文件中的测试。
- 要使单个文件中的测试失败,请创建一个
setup
函数,该函数使用 return 1
使该文件中的测试失败。
答案更详细
正在中止所有 个文件
你的第二个例子几乎在那里。诀窍是将输出重定向到 stderr
1.
在全局范围内使用 exit
或 return 1
将停止整个测试套件。
#!/usr/bin/env bats
if [[ -z "$(type -t unzip)" ]]; then
echo "Missing dep unzip" >&2
return 1
fi
@test ...
缺点是在中止文件中和之后的任何测试都将 而不是 运行,即使这些测试通过了。
中止单个文件
如果依赖项不存在,更细粒度的解决方案是添加 setup
2 function that will skip
3。
由于 setup
函数在定义它的文件中的每个测试之前被调用,
如果缺少依赖项,将跳过该文件中的所有测试。
#!/usr/bin/env bats
setup(){
if [[ -z "$(type -t unzip)" ]]; then
skip "Missing dep unzip"
fi
}
@test ...
失败而不是跳过
也有可能 失败 具有未满足依赖关系的测试。使用 return 1
来自测试的 setup
函数将使该文件中的所有测试失败:
#!/usr/bin/env bats
setup(){
if [[ -z "$(type -t unzip)" ]]; then
echo "Missing dep unzip"
return 1
fi
}
@test ...
由于消息输出不在全局范围内,因此不必将其重定向到 sdterr
(尽管这也可以)。
脚注
在 the page about Bats-Evaluation-Process in the wiki 的底部和手册中提到了这一点(如果你 运行 man 7 bats
):
CODE OUTSIDE OF TEST CASES
You can include code in your test file outside of @test functions.
For example, this may be useful if you want to check for
dependencies and fail immediately if they´re not present. However,
any output that you print in code outside of @test, setup or teardown
functions must be redirected to stderr (>&2). Otherwise, the output
may cause Bats to fail by polluting the TAP stream on stdout.
有关 setup
的详细信息,请参阅 https://github.com/bats-core/bats-core#setup-and-teardown-pre--and-post-test-hooks
有关 skip
的详细信息,请参阅 https://github.com/bats-core/bats-core#skip-easily-skip-tests
有没有办法摆脱整个测试文件?整个测试套件?
类似于
@test 'dependent pgm unzip' {
command -v unzip || BAIL 'missing dependency unzip, bailing out'
}
编辑:
我可以做类似的事情
#!/usr/bin/env bats
if [[ -z "$(type -t unzip)" ]]; then
echo "Missing dep unzip"
exit 1
fi
@test ...
这对于测试开始时 运行 的检查工作正常,只是它不作为报告的一部分输出。
但是,如果我想确定源脚本是否正确定义了一个函数,如果没有,则放弃,添加这种测试可以防止生成任何类型的报告。不显示成功的测试。
TL;DR
- 要查看中止消息,请使用
>&2
在全局范围内将消息重定向到stderr
。 - 要在失败后中止 所有 文件,请在全局范围内使用
exit 1
。 - 要仅中止单个文件,请创建一个
setup
函数,该函数使用skip
仅中止该文件中的测试。 - 要使单个文件中的测试失败,请创建一个
setup
函数,该函数使用return 1
使该文件中的测试失败。
答案更详细
正在中止所有 个文件
你的第二个例子几乎在那里。诀窍是将输出重定向到 stderr
1.
在全局范围内使用 exit
或 return 1
将停止整个测试套件。
#!/usr/bin/env bats
if [[ -z "$(type -t unzip)" ]]; then
echo "Missing dep unzip" >&2
return 1
fi
@test ...
缺点是在中止文件中和之后的任何测试都将 而不是 运行,即使这些测试通过了。
中止单个文件
如果依赖项不存在,更细粒度的解决方案是添加 setup
2 function that will skip
3。
由于 setup
函数在定义它的文件中的每个测试之前被调用,
如果缺少依赖项,将跳过该文件中的所有测试。
#!/usr/bin/env bats
setup(){
if [[ -z "$(type -t unzip)" ]]; then
skip "Missing dep unzip"
fi
}
@test ...
失败而不是跳过
也有可能 失败 具有未满足依赖关系的测试。使用 return 1
来自测试的 setup
函数将使该文件中的所有测试失败:
#!/usr/bin/env bats
setup(){
if [[ -z "$(type -t unzip)" ]]; then
echo "Missing dep unzip"
return 1
fi
}
@test ...
由于消息输出不在全局范围内,因此不必将其重定向到 sdterr
(尽管这也可以)。
脚注
在 the page about Bats-Evaluation-Process in the wiki 的底部和手册中提到了这一点(如果你 运行
man 7 bats
):CODE OUTSIDE OF TEST CASES You can include code in your test file outside of @test functions. For example, this may be useful if you want to check for dependencies and fail immediately if they´re not present. However, any output that you print in code outside of @test, setup or teardown functions must be redirected to stderr (>&2). Otherwise, the output may cause Bats to fail by polluting the TAP stream on stdout.
有关
setup
的详细信息,请参阅 https://github.com/bats-core/bats-core#setup-and-teardown-pre--and-post-test-hooks有关
skip
的详细信息,请参阅 https://github.com/bats-core/bats-core#skip-easily-skip-tests