2014-01-18 88 views
0

我想發送一條警告給用戶,如果他們給::config方法錯誤的鍵,但也讓該方法繼續執行。所以,這是寫給STDOUT的,對吧?RSpec測試使用Ruby寫入STDOUT

def configure opts={} 
    if (@valid_config_keys - opts.keys).any? 
    print "WARNING message" 
    end 
    # rest of method 
end 

我有一個測試不及格:

it "should warn the user against bad data" do 
    STDOUT.should_receive(:print).with("WARNING message") 
    subject 
end 

即使我看到,當我運行測試所顯示的警告消息。我無法弄清楚如何在這裏訪問正確的STDOUT對象,因爲代碼肯定有效。我也直接從測試中將警告信息複製到生產代碼中,所以我確信消息中沒有任何小的錯別字。任何幫助都會很棒。

回答

1

PrintKernel模塊的一類方法。作爲實例方法,Kernel模塊的所有類方法都包含在Object類中。所有其他課程都是從Object課程開始的。所以你應該期待你從print那裏得到它的課程來獲得它:

YourClassName.should_receive(:print).with("WARNING message") 
+0

這樣的工作,但只有當我打印爲'Kernel.print'時纔有效。如果我只是調用'print',則顯示輸出,但測試仍然失敗。想知道爲什麼會這樣? –

+0

嘗試使用'configure opts'方法定義的類的名稱替換'Kernel' –

+0

非常棒的人。非常感謝。 –