Rspec - 捕获linux进程的stderr输出

时间:2017-06-21 10:37:02

标签: ruby rspec stderr

我想测试我的bash脚本向stderr输出一些消息的内容。 我试试这个:

require 'rspec'

describe 'My behaviour' do

  it 'should do something' do
    expect { `echo "foo" 1>&2` }.to output.to_stderr
  end
end

但似乎输出到stderr并不是在测试期间发生的。

2 个答案:

答案 0 :(得分:2)

RSpec的?匹配器正在寻找写入output.to_stderr / $stdout的东西 - 你的shell命令没有这样做,因为它作为一个单独的子命运行过程

为了测试这一点,您需要明确捕获shell代码的$stderrstdout。您可以使用Open3 standard library轻松构建自己的实现,或者使用rspec-bash gem

stderr

答案 1 :(得分:0)

找到一种不太精确但更容易阅读的方法:

require 'rspec'

describe 'My behaviour' do

  it 'should do something' do
    expect { system('echo "foo" 1>&2 ') }.to output.to_stderr_from_any_process
  end
end

AFAIU - 它无法检查确切的消息,但这对我来说已经足够了