我有一个方法,它将代码块作为参数。问题是:如果此方法调用块,如何使用RSpec进行测试?
可以在方法需要的任何范围内评估该块,不一定使用yield
或block.call
。它被传递给另一个类,或者在匿名类对象或其他地方进行评估。对于要通过的测试,足以在方法调用的结果中评估块。
有没有办法使用RSpec测试这样的东西?
有关lets
和模拟的更复杂案例,请参阅this。
答案 0 :(得分:3)
我喜欢使用throw
代替raise
来解决这类问题,因为无法将其作为任意救援处理程序获救。所以它可能看起来像这样:
my_proc = proc { throw :my_proc_was_called }
expect {
my_proc.call
}.to throw_symbol :my_proc_was_called
答案 1 :(得分:2)
我经常做类似
的事情a = 1
b.go { a = 2}
a.should == 2
答案 2 :(得分:1)
感谢Dave Newton在上述评论中提出的建议,我做了类似的事情:
it "should run block defining the node" do
message="This message is raised if block is properly evaluated."
expect do
node do
raise message
end
end.to raise_error message
end
如果出现错误,则会打印消息:
Failure/Error: expect do
expected Exception with "This message is raised if block is properly evaluated." but nothing was raised
我发现足够的信息。
再次感谢您的帮助!