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
啊,我想當我上次運行它時,我的語法錯誤或者有些問題。謝謝! –