有没有办法从蝙蝠测试中保释?

时间:2018-04-23 23:26:42

标签: bats-core

有没有办法摆脱整个测试文件?整个测试套件?

的内容
@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 ...

这对于在测试开始时运行的检查很有效,除了它不作为报告的一部分输出。

但是如果我想确定一个源脚本是否正确定义了一个函数并保留了它是否正确,那么添加那种测试可以防止生成任何类型的报告。不会显示成功的测试。

1 个答案:

答案 0 :(得分:3)

TL; DR

  • 要查看中止消息,请使用sdterr将全局范围内的消息重定向至>&2
  • 要在失败后中止所有文件,请在全局范围内使用exit 1
  • 要仅中止单个文件,请创建一个setup函数,该函数使用skip仅中止该文件中的测试。
  • 要在单个文件中进行测试失败,请创建一个使用setup的{​​{1}}函数来使该文件中的测试失败。

更详细的答案

中止所有文件

你的第二个例子几乎。诀窍是将输出重定向到return 1 1

使用全局范围内的stderrexit将暂停整个测试套件。

return 1

缺点是,在中止文件中和之后的任何测试都将运行,即使这些测试都要通过。

中止单个文件

更精细的解决方案是添加#!/usr/bin/env bats if [[ -z "$(type -t unzip)" ]]; then echo "Missing dep unzip" >&2 return 1 fi @test ... 2 函数,setup 3 如果依赖性不存在。

由于skip函数在文件中的每个测试之前被调用,因此在其中定义, 如果缺少依赖项,将跳过该文件中的所有测试。

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 ... (尽管这样也可以)。

脚注

  1. the page about Bats-Evaluation-Process in the wiki的底部和手册(如果您运行sdterr)中提到了这一点:

    man 7 bats
  2. 有关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. 的详细信息,请参阅https://github.com/bats-core/bats-core#setup-and-teardown-pre--and-post-test-hooks

  3. 有关setup的详细信息,请参阅https://github.com/bats-core/bats-core#skip-easily-skip-tests