上下文
在使用bash中的keepass2测试测试bats安装过程时,我注意到终端中命令的输出与bats测试中捕获的输出不同。在终端中,命令keepass2 --version返回:
Gtk-Message: 15:29:44.377: Failed to load module "canberra-gtk-module"
KeePass 2.45
Copyright © 2003-2020 Dominik Reichl而以下测试的测试输出:
@test "Checking keepass2 version responds with Failed to load module canberra-gtk-module." {
COMMAND_OUTPUT=$(keepass2 --version)
EXPECTED_OUTPUT='Gtk-Message: 15:29:44.377: Failed to load module "canberra-gtk-module"
KeePass 2.45
Copyright © 2003-2020 Dominik Reichl'
assert_equal "$COMMAND_OUTPUT" "$EXPECTED_OUTPUT"
}是:
✗ Checking keepass2 version responds with: Failed to load module canberra-gtk-module.
(from function `assert_equal' in file test/post_setup/../../test/libs/bats-assert/src/assert.bash, line 91,
in test file test/post_setup/test_apt_install_keepass2_postsetup.bats, line 68)
`assert_equal "$COMMAND_OUTPUT" "$EXPECTED_OUTPUT"' failed
Gtk-Message: 15:51:27.775: Failed to load module "canberra-gtk-module"
/home/a/Documents/git/Productivity-setup/test/post_setup/../../test/libs/bats-assert/src/assert.bash: line 65: [: KeePass 2.45
Copyright © 2003-2020 Dominik Reichl: binary operator expected
-- values do not equal --
expected (3 lines):
Gtk-Message: 15:29:44.377: Failed to load module "canberra-gtk-module"
KeePass 2.45
Copyright © 2003-2020 Dominik Reichl
actual (2 lines):
KeePass 2.45
Copyright © 2003-2020 Dominik Reichl
--因此,bats测试认为该命令的输出仅包含同一命令的命令行输出的最后2行,而我希望bats能够捕获运行keepass2 --version时在命令行中看到的全部3行输出。
问题
我如何捕获命令行中显示的Gtk-Message: 15:29:44.377: Failed to load module "canberra-gtk-module"行,用于keepass2 --version命令,在bats测试中?
备注
这不是关于如何解决canberra-gtk-module警告的xy问题.它也不是关于如何在抛出警告canberra警告时进行通过的测试。这个问题是关于如何在蝙蝠测试中捕捉来自version命令的警告。
发布于 2021-03-25 15:56:12
这一行可能不是stdout,而是stderr。
Gtk-Message: 15:29:44.377: Failed to load module "canberra-gtk-module"这一行只捕获变量中的stdout。
COMMAND_OUTPUT=$(keepass2 --version)从EXPECTED_OUTPUT中删除第一行应该会修复它。
(该错误对检查版本没有影响,因此可以在测试中忽略它)
捕获stdout和stderr
COMMAND_ERR_OUT=$(keepass2 --version 2>&1)只捕获stderr
COMMAND_ERR=$(keepass2 --version 2>&1 >/dev/null)https://stackoverflow.com/questions/66802181
复制相似问题