4

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

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

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


另请参阅this以了解更复杂的情况lets和模拟。

4

3 回答 3

3

我喜欢使用throw而不是raise解决这类问题,因为它不能被任意救援处理程序救援。所以它可能看起来像这样:

my_proc = proc { throw :my_proc_was_called }
expect {
  my_proc.call
}.to throw_symbol :my_proc_was_called
于 2014-08-23T15:07:55.287 回答
2

我通常会做类似的事情

a = 1
b.go { a = 2}
a.should == 2
于 2012-11-06T17:07:50.303 回答
1

感谢戴夫牛顿在上面评论中的建议,我做了这样的事情:

 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

我觉得信息量足够大。

再次感谢您的帮助!

于 2012-11-06T15:06:58.493 回答