2012-03-05 85 views
2

運行測試時,我經常遇到錯誤的nil值。爲了找到問題,我最終插入了一堆線如:任何方式來打印範圍內的所有零對象?

puts 'variable x is nil' if x.nil? 
puts 'variable y is nil' if y.nil? 
... 

這慢慢讓我更接近問題。是否有寶石或能夠快速打印當前範圍內所有nil變量的列表?或者一些調試我的方法的方法不那麼費力?

+0

Ahm,no。你得到什麼樣的錯誤?很可能你可以用不同的方式理解它們。 – 2012-03-05 16:05:30

+1

什麼是「錯誤的零值」?我不清楚你實際上想要解決什麼問題。 – 2012-03-05 16:06:17

+0

對不起。出現問題的地方是零而且不應該是 - 我引用了錯誤的東西,或者請求了錯誤的參數,或者當我引用現有的參數時意外地創建了新的變量。各種各樣的東西〜類似'空指針錯誤'。 – smallsense 2012-03-05 17:07:10

回答

3

如果你正在使用所謂的printf-調試來追蹤這些問題,你可能會做錯了。你可能想編寫一個斷言值的情況下測試,然後斷言附加條件:

assert x 
assert y 

這似乎很奇怪你得到這麼多的,你需要走出自己的路nil值追蹤他們。通常他們是在一個特定的時間點產生的,所以他們的陷阱,儘快以避免以後進行檢查:

x = foo('a', 'b') 
assert x, "foo(...) did not return a value" 
+0

感謝您的提示。鍵入'assert y'肯定比較容易。我同意,這是一個非常不尋常的問題。我認爲這是對Rails新的組合(因此忘記了各種gem/classes的正確語法)並試圖回溯性地編寫RSpec測試。 – smallsense 2012-03-05 19:02:56

1

如果你正在做的printf調試,你不妨使用inspect - 這是什麼它設計用於:

puts 'variable x is #{x.inspect}' 
puts 'variable y is #{y.inspect}' 

有可能是元編程的方法來獲取所有的局部變量,但我認爲這會是矯枉過正。