簡體   English   中英

RSpec中的存根方法參數

[英]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方法也存在,但是我可以使用該方法產生參數並在使用新的已修改參數調用原始參數之前對其進行修改嗎?

還是有一種方法可以“取消存根”塊中的對象,以便我再次調用它不會引起問題?

謝謝!

使用and_wrap_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM