2013-01-31 31 views
1

我設置一個模擬對象,並告訴它期待零的支票,並返回false:當方法意外地被調用超過指定次數時,是否有辦法從rspec獲取堆棧跟蹤?

status = double('status') 
status.should_receive(:nil?).and_return(false) 

我只希望在調用零?發生一次,但在我的rspec測試中出現錯誤,表示狀態收到零?兩次。

有沒有辦法讓rspec顯示每個電話在哪裏/如何發生?

添加'--backtrace'選項不起作用。

回答

1

嘗試這樣:

status.should_receive(:nil?).twice { puts caller; false } 

這告訴RSpec的允許兩個調用,每次調用相關的塊。 caller方法會生成完整的回溯,您應該可以在stdout上進行分析。我們還返回false以保持我們正在測試的代碼路徑。

如果兩個回溯很難區分和你僅在第二(意外)調用感興趣,然後成立了兩個連續的期望:

status.should_receive(:nil?).and_return(false) 
status.should_receive(:nil?) { puts caller; false } 

這裏的雙將返回false第一次調用並在第二個電話塊上打電話。

對預期的反應設置參考:
https://github.com/rspec/rspec-mocks#setting-responses

相關問題