2017-04-18 35 views
2

我有大意如下的東西在我spec文件之一:如何在rspec期望保存一個變量?

expect(my_instance).to receive(:my_function).with(arg: instance_of(String)) 

我希望能夠捕捉到的arg實際值的變量我可以在規範使用。有沒有辦法做到這一點?我檢查了rspec文檔,但沒有找到類似的東西。

回答

2

你可以聲明變量,說captured_argexpect之前(或allow,如果你不希望它如果my_instance沒有收到my_function失敗)。然後您可以收集塊中的參數並在該塊內設置captured_arg

captured_arg = nil 
expect(my_instance).to receive(:my_function) { |arg| captured_arg = arg } 

編輯:(關鍵參數)

如果使用keyword arguments,只需修改上面的腳本咯,使用arg作爲關鍵字參數,你想拍攝:

captured_arg = nil 
expect(my_instance).to receive(:my_function) { |args| captured_arg = args[:arg] }