我试图测试在rspec规范中调用proc。我能想出的最好的是:
my_proc = proc { throw :my_proc_was_called }
expect {
my_proc.call
}.to throw_symbol :my_proc_was_called
但是这假设没有别的东西可以捕获我抛出的符号,而且我不会介意检查参数的方法,而不是将参数匹配器放在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)