我想测试我的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并不是在测试期间发生的。
答案 0 :(得分:2)
RSpec的?
匹配器正在寻找写入output.to_stderr
/ $stdout
的东西 - 你的shell命令没有这样做,因为它作为一个单独的子命运行过程
为了测试这一点,您需要明确捕获shell代码的$stderr
和stdout
。您可以使用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 - 它无法检查确切的消息,但这对我来说已经足够了