2014-02-11 24 views
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

回答

1

是的,你可以做你提出什麼,因爲with接受一個正則表達式作爲參數,如:

describe "RSpec's #with method" do 
    it "accepts a regex" do 
    object = Object.new 
    object.should_receive(:foo).with(/bar/) 
    object.foo('foobar') 
    end 
end 
+0

啊,我想當我上次運行它時,我的語法錯誤或者有些問題。謝謝! –

相關問題