通过 bats 测试特定目录及其内容的创建
Test creation of specific directory and its contents via bats
我正在调用我创建的交互式 cli 工具(使用 go
但这不在问题的范围内)。
我正在使用 BATS 和 expect
的组合对其进行集成测试。
这里是具体的测试套件:
@test "Running interactive test - providing clone directory parameter" {
cd test_expect
eval "./basic_interactive.exp"
}
这一步的成功是创建了一个包含预定义内容的特定目录。
因为我是 BATS
的新手,所以我无法找到一种方法来断言命令
ls -1 /path/to/directory/that/is/supposed/to/be/created
等于
file1
file2
file3
等等
有什么建议吗?
我试过了
@test "Running interactive test - providing clone directory parameter" {
cd test_expect
eval "./basic_interactive.exp"
eval "ls -1 path/to/directory/that/is/supposed/to/be/created"
echo $output
}
但它不打印任何东西。
如果我对你的问题的理解正确,你基本上想要运行一个命令并验证输出,对吗?
Bats includes a run
helper that invokes its arguments as a command, saves the exit status and output into special global variables
BATS 测试方法中可用于验证输出的两个变量是:
$output
,其中包含命令的标准输出和标准错误流的组合内容
$lines
数组,用于轻松访问输出的各个行
将此应用到您的示例中会得到:
@test "Running interactive test - providing clone directory parameter" {
cd test_expect
./basic_interactive.exp
run ls -1 path/to/directory/that/is/supposed/to/be/created
expected=$(cat <<-TXT
file1
file2
file3
TXT
)
[ "${output}" = "${expected}" ]
}
如果您发现自己更频繁地使用 BATS(或用于更复杂的测试),您可能会考虑使用专用断言库(如 bats-assert)让您的生活更轻松。
(特别是 assert_output
命令值得研究,因为它支持文字、部分和正则表达式匹配)。
要了解为什么看不到任何输出,您需要阅读 the section in the manual titled "Printing to the terminal"。简而言之,它归结为仅在重定向到文件描述符 3 时才显示输出:
@test "test with output to terminal" {
echo "# This will show up when you run the test" >&3
}
我正在调用我创建的交互式 cli 工具(使用 go
但这不在问题的范围内)。
我正在使用 BATS 和 expect
的组合对其进行集成测试。
这里是具体的测试套件:
@test "Running interactive test - providing clone directory parameter" {
cd test_expect
eval "./basic_interactive.exp"
}
这一步的成功是创建了一个包含预定义内容的特定目录。
因为我是 BATS
的新手,所以我无法找到一种方法来断言命令
ls -1 /path/to/directory/that/is/supposed/to/be/created
等于
file1
file2
file3
等等
有什么建议吗?
我试过了
@test "Running interactive test - providing clone directory parameter" {
cd test_expect
eval "./basic_interactive.exp"
eval "ls -1 path/to/directory/that/is/supposed/to/be/created"
echo $output
}
但它不打印任何东西。
如果我对你的问题的理解正确,你基本上想要运行一个命令并验证输出,对吗?
Bats includes a
run
helper that invokes its arguments as a command, saves the exit status and output into special global variables
BATS 测试方法中可用于验证输出的两个变量是:
$output
,其中包含命令的标准输出和标准错误流的组合内容$lines
数组,用于轻松访问输出的各个行
将此应用到您的示例中会得到:
@test "Running interactive test - providing clone directory parameter" {
cd test_expect
./basic_interactive.exp
run ls -1 path/to/directory/that/is/supposed/to/be/created
expected=$(cat <<-TXT
file1
file2
file3
TXT
)
[ "${output}" = "${expected}" ]
}
如果您发现自己更频繁地使用 BATS(或用于更复杂的测试),您可能会考虑使用专用断言库(如 bats-assert)让您的生活更轻松。
(特别是 assert_output
命令值得研究,因为它支持文字、部分和正则表达式匹配)。
要了解为什么看不到任何输出,您需要阅读 the section in the manual titled "Printing to the terminal"。简而言之,它归结为仅在重定向到文件描述符 3 时才显示输出:
@test "test with output to terminal" {
echo "# This will show up when you run the test" >&3
}