首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >蝙蝠测试指令输出未被完全捕获

蝙蝠测试指令输出未被完全捕获
EN

Stack Overflow用户
提问于 2021-03-25 15:00:19
回答 1查看 155关注 0票数 0

上下文

在使用bash中的keepass2测试测试bats安装过程时,我注意到终端中命令的输出与bats测试中捕获的输出不同。在终端中,命令keepass2 --version返回:

代码语言:javascript
复制
Gtk-Message: 15:29:44.377: Failed to load module "canberra-gtk-module"
KeePass 2.45
Copyright © 2003-2020 Dominik Reichl

而以下测试的测试输出:

代码语言:javascript
复制
@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"
}

是:

代码语言:javascript
复制
✗ 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命令的警告。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-25 15:56:12

这一行可能不是stdout,而是stderr。

代码语言:javascript
复制
Gtk-Message: 15:29:44.377: Failed to load module "canberra-gtk-module"

这一行只捕获变量中的stdout。

代码语言:javascript
复制
COMMAND_OUTPUT=$(keepass2 --version)

EXPECTED_OUTPUT中删除第一行应该会修复它。

(该错误对检查版本没有影响,因此可以在测试中忽略它)

捕获stdout和stderr

代码语言:javascript
复制
COMMAND_ERR_OUT=$(keepass2 --version 2>&1)

只捕获stderr

代码语言:javascript
复制
COMMAND_ERR=$(keepass2 --version 2>&1 >/dev/null)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66802181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档