RSpec - 测试方法是否称为块参数

时间:2012-11-06 10:35:23

标签: ruby methods rspec call block

我有一个方法,它将代码块作为参数。问题是:如果此方法调用块,如何使用RSpec进行测试?

可以在方法需要的任何范围内评估该块,不一定使用yieldblock.call。它被传递给另一个类,或者在匿名类对象或其他地方进行评估。对于要通过的测试,足以在方法调用的结果中评估块。

有没有办法使用RSpec测试这样的东西?


有关lets和模拟的更复杂案例,请参阅this

3 个答案:

答案 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

我发现足够的信息。

再次感谢您的帮助!

相关问题