Rspec - 存根块和测试生成的主体的更好方法

Rspec - Better way to stub a block and test the yielded body

我想存根testBlock块并直接测试它的内部。这是我的 class

class MyClass
  def method1
    testBlock('parameter') do
      my_model.method2
    end
  end

  def testBlock(param)
    yield
  end
end

这是测试

RSpec.describe MyClass do
  it 'calls method2' do
    allow(subject).to receive(:testBlock) { |&block| [1].each(&block) }

    expect(my_model).to receive(:method2)
    subject.method1
  end
end

{ |&block| [1].each(&block) } 只是实现我想要的行为的一种解决方法,但是有没有更好的方法来实现这个而不用 each 块替换块本身?

提前致谢。

each 替换为 block.call 或仅删除参数和 yield.

我假设 testBlock 的实际实现更复杂,因为按原样,yield 正是您所需要的。