[英]Stubbing method parameters in RSpec
假設我有一堂課
class A
def initialize
end
def foo(a, b)
# Do stuff
end
end
為此編寫RSpec測試時,如何截獲對foo
的調用並修改其參數?
我可能會嘗試以下類似方法來捕獲方法調用,產生參數,以便我可以對其進行修改,然后調用原始方法
my_obj = A.new
allow(my_obj).to receive(:foo) do |a, b|
my_obj.foo("new", "values")
end
expect(my_obj.foo).to eq("bar")
但是,這樣做的問題在於,再次在該塊內調用A#foo
存根並生成一個新塊,從而產生無限遞歸循環,直到堆棧用盡內存。
我知道.and_call_original
方法也存在,但是我可以使用該方法產生參數並在使用新的已修改參數調用原始參數之前對其進行修改嗎?
還是有一種方法可以“取消存根”塊中的對象,以便我再次調用它不會引起問題?
謝謝!
my_obj = A.new
allow(my_obj).to receive(:foo).and_wrap_original do |original_method, a, b|
original_method.call("new", "values")
end
expect(my_obj.foo).to eq("bar")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.