如何测试方法是否在RSpec中捕获抛出的符号?我有两种方法可以通过#throw和#catch相互交互。我已经想出如何测试符号被抛出的一端:
expect { subject.method_a }.to throw_symbol(:some_symbol)
现在我想测试一下method_b捕获抛出的符号,我想这可能看起来像这样:
expect { subject.method_b }.to catch_symbol(:some_symbol)
只有这不起作用。所以我的问题是,你怎么测试一个方法在RSpec中捕获一个符号?
编辑:这是method_a和method_b的一个非常基本的例子,剥离了与手头问题无关的所有逻辑。
def method_a
throw :some_symbol
end
def method_b
catch :some_symbol do
method_a
end
end
答案 0 :(得分:1)
catch
和throw
是内核上的方法,因此您可以照常使用它们:
class SomeClass
def a
throw :foo
end
def b
catch :foo do
a
end
end
end
RSpec.describe "" do
it "" do
inst = SomeClass.new
expect(inst).to receive(:throw).with(:foo)
inst.a
expect(inst).to receive(:catch).with(:foo)
inst.b
end
end