我正在尝试测试在 rspec 规范中调用了 proc。我能想到的最好的办法是:
my_proc = proc { throw :my_proc_was_called }
expect {
my_proc.call
}.to throw_symbol :my_proc_was_called
Run Code Online (Sandbox Code Playgroud)
但这假设没有其他任何东西可以捕捉到我抛出的符号,而且我不介意用更简洁的方式来检查参数,而不是将参数匹配器放在 proc 内部。使用 rspec 模拟,我可以检查一个对象是否接收了一个方法,甚至在检查参数后调用原始方法,但我找不到任何类似于 proc 的便利。
Chris Heald 建议只监听 proc 接收到的信息,call但如果块被 yield 调用,那么它就会崩溃,如下例所示:
my_class = Class.new do
def call_proc
yield
end
end
my_proc = proc { }
expect(my_proc).to receive(:call)
my_class.new.call_proc(&my_proc)
Run Code Online (Sandbox Code Playgroud)