我有一个基于Thor的ruby CLI项目,我正在尝试添加单元测试。它起初是一个宠物项目,现在内部相当大而重要。无论如何,我从来没有真正开始进行单元测试,只是嫁接到现有的例子上,所以当谈到rspec时我就是一个菜鸟。
我从一个相当基本的例子开始,确保如果我给它一个不存在的文件,它会回复一个解释性错误并退出。
以下是我尝试复合它们的方法:
context 'with incorrect filename' do
it 'should fail cleanly' do
expect do
subject.format('bad_file_name')
end.to output(' ERROR Unable to load file bad_file_name, exiting...').to_stdout.and raise_error(SystemExit)
end
end
有效但不能正确捕捉标准输出output here ..也尝试过:
context 'with incorrect filename' do
it 'should fail cleanly' do
expect do
expect do
subject.format('fixtures/invalid.yaml')
end.to output(' ERROR Unable to load file bad_file_name, exiting...').to_stdout
end.to raise_error(SystemExit)
end
end
看起来它有效,除了(如本例所示)它实际上并没有测试输出,因为输出不匹配。
那么检查引发的错误和同时输出到stdout的正确方法是什么?
答案 0 :(得分:0)
this works for me
expect { whatever }.to output('stderr message').to_stderr
.and output(Regexp.new('stdout message')).to_stdout
.and raise_error('Error message')