0
我有一个测试,我想运行测试,我收到输出到STDOUT在Ruby中。如何在不引发警告错误的情况下在Ruby中存储STDOUT?
现在我的测试是这样的:
STDOUT.sync = true
@orig_stdout_constant = STDOUT
STDOUT = StringIO.new
subject.request(:get, '/success')
expect(STDOUT.string).to include 'INFO -- : get https://api.example.com/success', 'INFO -- : get https://api.example.com/success'
STDOUT = @orig_stdout_constant
其中一期工程和测试通过,但感觉非常哈克,你会得到关于已初始化的常量红宝石警告错误。
我知道你可以这样做:
subject.request(:get, '/success')
STDOUT.should_receive(:print).with("I, [2014-02-11T14:55:00.282124 #650] INFO -- : get https://api.example.com/success")
但你可以看到字符串有两个值,将在每次运行测试时发生变化:时间(我可以用时空特警修复,但不喜欢到)和运行的id(这是设置在法拉第,我可以存根,但再次:我不想...)
所以问题的症结是:有没有办法做STDOUT.should_receive(:print).with(/[\s\S]+ INFO -- : get https:\/\/api.example.com\/success/)
或做一些接收匹配?
完整的代码是在这里,如果有帮助:https://github.com/petems/oauth2/blob/faraday_debug/spec/oauth2/client_spec.rb#L123
啊,我想当我上次运行它时,我的语法错误或者有些问题。谢谢! –