我有一些代碼,可以用非常簡單的術語表示為:
我有一些代碼,可以用非常簡單的術語表示為:
def method_a(key)
hash = method b(key)
hash.delete(key)
end
def method_b(key)
return { key => 1 }
end
然后是一個rspec測驗,如
它 '呼叫 method_b'
expect(someClass).to receive(: method_b).with(key)
method_a(key)
結束。
然而,我在method_a的第二行得到一個錯誤,因為它試圖在一個nil物件上呼叫delete。當我除錯時,我可以看到method_b里面的邏輯從未被實際呼叫過。它不是在 method_b 的某個地方失敗了,而是根本就沒有呼叫它。如果我去掉測驗中的expect陳述句,這個錯誤就會消失。似乎期望陳述句導致它跳過了對 method_b 的實際呼叫,給我留下了一個 nil 值,而不是我所期望的哈希值。
我是否有辦法阻止它跳過 method_b,或者至少在 expect 陳述句成功后終止執行,這樣我就不會在下一行遇到錯誤了?
uj5u.com熱心網友回復:
當你設定一個訊息期望時,它會覆寫原始代碼,除非你明確告訴RSpec不要這樣做:
expect(someClass).to receive(:method_b) .with(key).and_call_original
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/323817.html
標籤:
