運行測試時,我經常遇到錯誤的nil
值。爲了找到問題,我最終插入了一堆線如:任何方式來打印範圍內的所有零對象?
puts 'variable x is nil' if x.nil?
puts 'variable y is nil' if y.nil?
...
這慢慢讓我更接近問題。是否有寶石或能夠快速打印當前範圍內所有nil
變量的列表?或者一些調試我的方法的方法不那麼費力?
運行測試時,我經常遇到錯誤的nil
值。爲了找到問題,我最終插入了一堆線如:任何方式來打印範圍內的所有零對象?
puts 'variable x is nil' if x.nil?
puts 'variable y is nil' if y.nil?
...
這慢慢讓我更接近問題。是否有寶石或能夠快速打印當前範圍內所有nil
變量的列表?或者一些調試我的方法的方法不那麼費力?
如果你正在使用所謂的printf
-調試來追蹤這些問題,你可能會做錯了。你可能想編寫一個斷言值的情況下測試,然後斷言附加條件:
assert x
assert y
這似乎很奇怪你得到這麼多的,你需要走出自己的路nil
值追蹤他們。通常他們是在一個特定的時間點產生的,所以他們的陷阱,儘快以避免以後進行檢查:
x = foo('a', 'b')
assert x, "foo(...) did not return a value"
感謝您的提示。鍵入'assert y'肯定比較容易。我同意,這是一個非常不尋常的問題。我認爲這是對Rails新的組合(因此忘記了各種gem/classes的正確語法)並試圖回溯性地編寫RSpec測試。 – smallsense 2012-03-05 19:02:56
如果你正在做的printf調試,你不妨使用inspect
- 這是什麼它設計用於:
puts 'variable x is #{x.inspect}'
puts 'variable y is #{y.inspect}'
有可能是元編程的方法來獲取所有的局部變量,但我認爲這會是矯枉過正。
Ahm,no。你得到什麼樣的錯誤?很可能你可以用不同的方式理解它們。 – 2012-03-05 16:05:30
什麼是「錯誤的零值」?我不清楚你實際上想要解決什麼問題。 – 2012-03-05 16:06:17
對不起。出現問題的地方是零而且不應該是 - 我引用了錯誤的東西,或者請求了錯誤的參數,或者當我引用現有的參數時意外地創建了新的變量。各種各樣的東西〜類似'空指針錯誤'。 – smallsense 2012-03-05 17:07:10