我想测试一下我的bash脚本是否可以输出一些信息到stderr。 我尝试了这个命令:
require 'rspec'
describe 'My behaviour' do
it 'should do something' do
expect { `echo "foo" 1>&2` }.to output.to_stderr
end
end
但是似乎标准错误输出并没有在测试期间发生。
output.to_stderr
匹配器寻找写入$stdout
/$stderr
的内容,但您的shell命令并未这样做,因为它作为单独的子进程运行。stdout
和stderr
。您可以使用Open3
标准库构建自己的实现,或者例如使用rspec-bash
gem:require 'rspec'
require 'rspec/bash'
describe 'My behaviour' do
include Rspec::Bash
let(:stubbed_env) { create_stubbed_env }
it 'should do something' do
stdout, stderr, status = stubbed_env.execute(
'echo "foo" 1>&2'
)
expect(stderr).to eq('foo')
end
end
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 - 它无法检查确切的消息,但对我来说已足够。
.to output('foo').to_std_error_from_any_process
-- 阅读文档。 - Tom Lord