1

我正在扩展NotAMock框架以在 rspec 中存根方法,并使存根屈服于方法块。

当我自己编写代码时,这个 Gist 中的代码可以完美运行(完成后类似于 NotAMock 存根方法)。

但是当我将 object.instance_eval... 代码合并到 NotAMock 框架中时,“block_given?” 总是返回 false ,因此我永远无法让我的收益正常工作。该方法已正确添加,我可以调用存根方法......但它不会识别我从 NotAMock 存根版本传递给该方法的块。

要查看我如何将此代码合并到 NotAMock 框架中,请转到我的 NotAMock 克隆并查看私有方法中的“add_hook”方法。

我知道这有点多问......我希望能找到一些指导。一整天都让我发疯。

4

2 回答 2

2

我什至不确定这是可能的。新的 Procs 甚至不识别块。

proc = Proc.new do
  if block_given?
    yield
  else
    puts "Not in a block"
  end
end

proc.call { puts "In a block"} # => puts Not in a block

Ruby 1.9 应该允许块将 &block 作为参数。但我不知道这是否可行,或者即使它是否允许条件块。

于 2009-10-23T04:47:57.583 回答
0

原来这个问题与我链接到的代码无关...... NotAMock 框架正在执行一些导致我的问题的额外方法重新定义。我已将问题缩小到一个特定的代码行,并且正在研究如何解决它。

于 2009-10-23T13:59:03.717 回答